From 0012904f168be57d1c98ec187572174c330eb14f Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 6 May 2008 07:47:03 +0000 Subject: git-svn-id: https://svn.neo-layout.org@501 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- README.txt | 24 + autohotkey/README.txt | 86 + autohotkey/neo20-all-in-one.ahk | 3198 ++++++++++++++++++++ autohotkey/neo20-all-in-one.exe | Bin 0 -> 222462 bytes autohotkey/neo20_mod-test.ahk | 2210 ++++++++++++++ kbdneo2/Quelldateien/README.txt | 17 + kbdneo2/Quelldateien/kbdneo2.c | 804 +++++ kbdneo2/Quelldateien/kbdneo2.def | 4 + kbdneo2/Quelldateien/kbdneo2.h | 109 + kbdneo2/Quelldateien/kbdneo2.rc | 11 + kbdneo2/Quelldateien/makefile | 15 + kbdneo2/Quelldateien/makefile.inc | 1 + kbdneo2/Quelldateien/sources | 2 + .../Treiber/32bit_Windows_Server_2003/NEO20.dll | Bin 0 -> 9728 bytes .../NEO20.dll | Bin 0 -> 9728 bytes kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll | Bin 0 -> 9728 bytes .../NEO20.dll | Bin 0 -> 10752 bytes .../NEO20.dll | Bin 0 -> 10752 bytes kbdneo2/Treiber/README.txt | 24 + msklc/NEO20_amd64.msi | Bin 0 -> 114688 bytes msklc/NEO20_i386.msi | Bin 0 -> 114688 bytes msklc/NEO20_ia64.msi | Bin 0 -> 114688 bytes msklc/amd64/NEO20.dll | Bin 0 -> 9216 bytes msklc/i386/NEO20.dll | Bin 0 -> 8192 bytes msklc/ia64/NEO20.dll | Bin 0 -> 9728 bytes msklc/setup.exe | Bin 0 -> 142848 bytes msklc/wow64/NEO20.dll | Bin 0 -> 9216 bytes neo_portable.zip | Bin 0 -> 442716 bytes 28 files changed, 6505 insertions(+) create mode 100644 README.txt create mode 100644 autohotkey/README.txt create mode 100644 autohotkey/neo20-all-in-one.ahk create mode 100644 autohotkey/neo20-all-in-one.exe create mode 100644 autohotkey/neo20_mod-test.ahk create mode 100644 kbdneo2/Quelldateien/README.txt create mode 100644 kbdneo2/Quelldateien/kbdneo2.c create mode 100644 kbdneo2/Quelldateien/kbdneo2.def create mode 100644 kbdneo2/Quelldateien/kbdneo2.h create mode 100644 kbdneo2/Quelldateien/kbdneo2.rc create mode 100644 kbdneo2/Quelldateien/makefile create mode 100644 kbdneo2/Quelldateien/makefile.inc create mode 100644 kbdneo2/Quelldateien/sources create mode 100644 kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll create mode 100644 kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll create mode 100644 kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll create mode 100644 kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll create mode 100644 kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll create mode 100644 kbdneo2/Treiber/README.txt create mode 100644 msklc/NEO20_amd64.msi create mode 100644 msklc/NEO20_i386.msi create mode 100644 msklc/NEO20_ia64.msi create mode 100644 msklc/amd64/NEO20.dll create mode 100644 msklc/i386/NEO20.dll create mode 100644 msklc/ia64/NEO20.dll create mode 100644 msklc/setup.exe create mode 100644 msklc/wow64/NEO20.dll create mode 100644 neo_portable.zip diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5d34a9d --- /dev/null +++ b/README.txt @@ -0,0 +1,24 @@ + +== Neo 2.0 für Windows == +Für eine Vielzahl von Windowsversionen stehen Treiber zur Verfügung. + +== Windows 98 == + +Für Windows 95 und 98 gibt es nur die Version 1 von NEO. Und zwar hier: +http://www.eigenheimstrasse.de:8668/space/Computerecke/NEO-Tastaturlayout/Download/Windows + + +== autohotkey == +Hierfür braucht man keine Administratorrechte, es muss jedoch zuerst ein Programm namens „autohotkey“ (http://www.autohotkey.com) installiert werden. Dazu benötigt man keine Administratorrechte, wenn man das Programm beispielsweise in das Verzeichnis „Eigene Dateien“ installiert. + +== kbdneo2 == +Hier entsteht mit Hilfe des WinDDK (http://www.microsoft.com/whdc/devtools/ddk/default.mspx) ein Windowstreiber mit allen 6 Ebenen, der also der MSKLC-Variante überlegen ist. +In dem Ordner befinden sich die Quelldateien und eine fertige NEO20.dll. Bitte die jeweilige README.txt beachten. + +== msklc == +Im Verzeichnis msklc sind Dateien, die mit dem MS Keyboard Layout Creator erstellt wurden. Nach Installation der dort abgelegten Dateien, ist das NEO-Layout in das Windowssystem integriert, als wäre es eins der vielen anderen Layouts verschiedener Sprachen. Man benötigt für die Installation jedoch Administratorrechte, weshalb man diese Variante nicht überall installieren kann. +Diese Version ist jedoch nicht mehr aktuell. + +== neo_portable.zip == +Wenn man den Inhalt des zip-Archivs auf einen USB-Stick entpackt, startet sich +Neo automatisch, sobald man den USB-Stick in den USB-Port steckt. \ No newline at end of file diff --git a/autohotkey/README.txt b/autohotkey/README.txt new file mode 100644 index 0000000..4b4c207 --- /dev/null +++ b/autohotkey/README.txt @@ -0,0 +1,86 @@ +Version 24.02.2008 + +== Installation == +=== Direkte Installation === +Einfach das Archiv neo20-all-in-one.exe herunterladen und die Datei irgendwo +speichern (am besten auf dem Desktop z.B.). Danach einen Doppelklick auf +diese .exe-Datei und NEO steht in voller Funktionalität zur Verfügung! +Das alles geht ohne Admin-Rechte und ist auf jedem Rechner sofort ausführbar. +Achtung: Da sich NEO in der Entwicklung befindet, kann es vorkommen, dass die +exe-Datei gegenüber der Datei neo20-all-in-one.ahk leicht veraltet sein kann. +Entwickler sollten daher Autohotkey selbst runterladen, wie unten beschrieben. + +Um kurzzeitig zu QWERTZ zu wechseln, kann mit Shift+Pause das Skript pausiert +werden. + +Momentan befindet sich in der Testphase, ob die 6. Ebene über Shift+Mod4 oder +über Mod3+Mod4 angesprochen werden soll (Shift+Mod4 zum Markieren bleibt +erhalten). Die Datei neo20_mod-test.ahk spricht die 6. Ebene über Mod3+Mod4 an, +ist jedoch nicht aktuell. + +=== Autohotkey herunter laden === +Man braucht als erstes das Programm namens »autohotkey« +(http://www.autohotkey.com/download/AutohotkeyInstall.exe). +Um dieses zu installieren benötigt man KEINE Administratorrechte, wenn man das +Programm beispielsweise in das Verzeichnis »Eigene Dateien/NEO« installiert. +Oder in ein anderes Verzeichnis, für das man Schreibrechte hat. + +=== ahk-Dateien === +Danach kann man das ahk-Skript »neo20-all-in-one.ahk« +mit einem Doppelklick starten. Man erhält dann ein Systray-Icon, mit dem man +das Skript vorübergehend deaktivieren (Suspend) oder komplett beenden kann. + +Wenn das Öffnen nicht direkt funktioniert: Öffnen mit -> Autohotkey.exe +auswählen -> Immer mit diesem Programm öffnen. + +=== Automatischer Start === +Bei Bedarf kann man sich eine Verknüpfung mit neo20-all-in-one.ahk in den +Autostart-Ordner legen, dann hat man die Belegung direkt bei der Anmeldung. + +== Wie es funktioniert == +Das Programm kann alle Tastendrucke abfangen und statt dessen andere Tasten +simulieren. Die Zeile + a::send b +fängt z. B. die Taste »a« ab und sendet statt dessen ein »b«. +Die ahk-Dateien lassen sich mit einem Texteditor bearbeiten, man muss +dann nur das Skript neu starten um die Änderungen zu übernehmen. + +== Bekannte Fehler == +Da die Compose-Taste auf rechter Mod3 + Tab liegt, mußte die Tabulator-Taste +umgemappt werden. Dadurch funktioniert leider die ShiftAltTab nicht mehr. +AltTab reagiert hingegen wie gewohnt. + +Bisher reagieren nur die Buchstaben der 1. und 2. Ebene richtig auf +CapsLock (also immer groß schreiben – CapsLock erreicht man unter Neo, wenn +man erst die rechte und dann die linke Mod3-Tasten gleichzeitig drückt). + +== Ziffernblock == +Der Ziffernblock reagiert nicht auf Tastenkombinationen mit Strg, Alt usw. + +Der Ziffernblock auf der 2. Ebene ist wahlweise +- bei AUSgeschaltetem Numlock +- bei EINgeschaltetem Numlock mit Shift +zu erreichen. +Der Ziffernblock auf der 3. Ebene funktioniert bei EINgeschaltetem +Numlock mit Mod3 (Caps/#). +Der Ziffernblock auf der 4. Ebene ist wahlweise +- bei AUSgeschaltetem Numlock mit Mod3 + Shift +- bei EINgeschaltetem Numlock über Mod4 +zu erreichen. +Da die 2. Ebene über Shift ebenfalls bei EINgeschaltetem Numlock +funktioniert ist das Ausschalten des Ziffernblocks nicht unbedingt +nötig. + +== Besonderheiten bei der ahk-Windowsversion von Neo == +Ebene 4 des Ziffernblocks lässt sich außer über Mod3+Shift auch über +Mod4 ansprechen. + +== Warnung == +ACHTUNG! Bei Windows ist folgendes festgelegt: +AltGr + Pos1 = Abmelden +AltGr + Ende = Computer ausschalten +--> diese Kombinationen treten auf bei AUSgeschaltetem Numlock mit Mod4 + +== FAQ == +Bei Problemen erst mal in die FAQ schauen, das meiste ist bekannt. +Hier: https://neo.eigenheimstrasse.de/svn/FAQ.txt diff --git a/autohotkey/neo20-all-in-one.ahk b/autohotkey/neo20-all-in-one.ahk new file mode 100644 index 0000000..8a30849 --- /dev/null +++ b/autohotkey/neo20-all-in-one.ahk @@ -0,0 +1,3198 @@ +/* + Titel: NEO 2.0 beta Autohotkey-Treiber + $Revision: 490 $ + $Date: 2008-04-19 22:51:27 +0200 (Sa, 19 Apr 2008) $ + Autor: Stefan Mayer + Basiert auf: neo20-all-in-one.ahk vom 29.06.2007 + + TODO: - ausgiebig testen... + - Menü des Tasksymbols + - Bessere Lösung für das leeren von PriorDeadKey finden, damit die Sondertasten + nicht mehr abgefangen werden müssen. + - Ebene 4 und 5 tauschen (im Programmcode, in der Doku ists schon) + - CapsLock auf 1. und 2. Ebene einbauen: + Die Buchstaben reagieren richtig auf CapsLock, da hier "sendinput {blind}" + verwendet wird. Bei anderen Tasten muss CapsLock in der ersten und zweiten Ebene + explizit abgefragt werden. + (Lässt sich das elegant in eine Funktion auslagern?) + Ideen: - Symbol ändern (Neo-Logo abwarten) + - bei Ebene 4 rechte Hand (Numpad) z.B. Numpad5 statt 5 senden + CHANGES: - SUBSCRIPT von 0 bis 9 sowie (auf Ziffernblock) + und - + • auch bei Ziffernblock auf der 5. Ebene + - Kein Parsen über die Zwischenablage mehr + - Vista-kompatibel + - Compose-Taste + • Brüche (auf Zahlenreihe und Hardware-Ziffernblock) + • römische Zahlen + • Ligaturen und Copyright +*/ + +; aus Noras script kopiert: +#usehook on +#singleinstance force +#LTrim + ; Quelltext kann eingerückt werden, + ; msgbox ist trotzdem linksbündig + +SetTitleMatchMode 2 +SendMode InputThenPlay + +name = Neo 2.0 +enable = Aktiviere %name% +disable = Deaktiviere %name% + +; Überprüfung auf deutsches Tastaturlayout +; ---------------------------------------- + +regread, inputlocale, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1 +regread, inputlocalealias, HKEY_CURRENT_USER + , Keyboard Layout\Substitutes, %inputlocale% +if inputlocalealias <> + inputlocale = %inputlocalealias% +if inputlocale <> 00000407 +{ + suspend + regread, inputlocale, HKEY_LOCAL_MACHINE + , SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale% + , Layout Text + msgbox, 48, Warnung!, + ( + Nicht kompatibles Tastaturlayout: + `t%inputlocale% + `nDas deutsche QWERTZ muss als Standardlayout eingestellt + sein, damit %name% wie erwartet funktioniert. + `nÄndern Sie die Tastatureinstellung unter + `tSystemsteuerung + `t-> Regions- und Sprachoptionen + `t-> Sprachen + `t-> Details... `n + ) + exitapp +} + +; Menü des Systray-Icons +; ---------------------- + +menu, tray, nostandard +menu, tray, add, Öffnen, open + menu, helpmenu, add, About, about + menu, helpmenu, add, Autohotkey-Hilfe, help + menu, helpmenu, add + menu, helpmenu, add, http://&autohotkey.com/, autohotkey + menu, helpmenu, add, http://www.neo-layout.org/, neo + menu, tray, add, Hilfe, :helpmenu +menu, tray, add +menu, tray, add, %disable%, togglesuspend +menu, tray, default, %disable% +menu, tray, add +menu, tray, add, Edit, edit +menu, tray, add, Reload, reload +menu, tray, add +menu, tray, add, Nicht im Systray anzeigen, hide +menu, tray, add, %name% beenden, exitprogram +menu, tray, tip, %name% + + +/* + Variablen initialisieren +*/ + +Ebene = 1 +PriorDeadKey := "" + + +/* + ------------------------------------------------------ + Modifier + ------------------------------------------------------ +*/ + +; CapsLock durch Mod3+Mod3 +*#:: +*CapsLock:: + if GetKeyState("#","P") and GetKeyState("CapsLock","P") + { + if GetKeyState("CapsLock","T") + { + setcapslockstate, off + } + else + { + setcapslockstate, on + } + } +return + +; KP_Decimal durch Mod4+Mod4 +*<:: +*SC138:: + if GetKeyState("<","P") and GetKeyState("SC138","P") + { + send {numpaddot} + } + return + +/* + Ablauf bei toten Tasten: + 1. Ebene Aktualisieren + 2. Abhängig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen + + Ablauf bei "lebenden" (sagt man das?) Tasten: + 1. Ebene Aktualisieren + 2. Abhängig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben + 3. "PriorDeadKey" mit leerem String überschreiben + + ------------------------------------------------------ + Reihe 1 + ------------------------------------------------------ +*/ + +*^:: + EbeneAktualisieren() + if Ebene = 1 + { + SendUnicodeChar(0x02C6) ; circumflex, tot + PriorDeadKey := "c1" + } + else if Ebene = 2 + { + SendUnicodeChar(0x02C7) ; caron, tot + PriorDeadKey := "c2" + } + else if Ebene = 3 + { + SendUnicodeChar(0x02D8) ; brevis + PriorDeadKey := "c3" + } + else if Ebene = 4 + { + send - ; querstrich, tot + PriorDeadKey := "c4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x00B7) ; Mittenpunkt, tot + PriorDeadKey := "c5" + } + else if Ebene = 6 + { + Send . ; punkt darunter (colon) + PriorDeadKey := "c6" + } +return + +*1:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex 1 + BSSendUnicodeChar(0x00B9) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2081) + Else If (CompKey = "r_small_1") + Comp3UnicodeChar(0x217A) ; römisch xi + Else If (CompKey = "r_capital_1") + Comp3UnicodeChar(0x216A) ; römisch XI + Else + send {blind}1 + If (PriorDeadKey = "comp") + CompKey := "1" + Else If (CompKey = "r_small") + CompKey := "r_small_1" + Else If (CompKey = "r_capital") + CompKey := "r_capital_1" + Else + CompKey := "" + } + else if Ebene = 2 + { + send ° + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x2640) ; Piktogramm weiblich + CompKey := "" + } + else if Ebene = 5 + { + SendUnicodeChar(0x2022) ; bullet + CompKey := "" + } + PriorDeadKey := "" +return + +*2:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B2) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2082) + Else If (CompKey = "r_small") + CompUnicodeChar(0x2171) ; römisch ii + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2161) ; römisch II + Else If (CompKey = "r_small_1") + Comp3UnicodeChar(0x217B) ; römisch xii + Else If (CompKey = "r_capital_1") + Comp3UnicodeChar(0x216B) ; römisch XII + Else + send {blind}2 + If (PriorDeadKey = "comp") + CompKey := "2" + Else + CompKey := "" + } + else if Ebene = 2 + { + SendUnicodeChar(0x2116) ; numero + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x26A5) ; Piktogramm Zwitter + CompKey := "" + } + else if Ebene = 5 + { + SendUnicodeChar(0x2023) ; aufzaehlungspfeil + CompKey := "" + } + PriorDeadKey := "" +return + +*3:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B3) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2083) + Else If (CompKey = "1") + CompUnicodeChar(0x2153) ; 1/3 + Else If (CompKey = "2") + CompUnicodeChar(0x2154) ; 2/3 + Else If (CompKey = "r_small") + CompUnicodeChar(0x2172) ; römisch iii + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2162) ; römisch III + Else + send {blind}3 + If (PriorDeadKey = "comp") + CompKey := "3" + Else + CompKey := "" + } + else if Ebene = 2 + { + send § + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x2642) ; Piktogramm männlich + CompKey := "" + } + PriorDeadKey := "" +return + +*4:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2074) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2084) + Else If (CompKey = "r_small") + CompUnicodeChar(0x2173) ; römisch iv + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2163) ; römisch IV + Else + send {blind}4 + If (PriorDeadKey = "comp") + CompKey := "4" + Else + CompKey := "" + } + else if Ebene = 2 + { + send » + CompKey := "" + } + else if Ebene = 3 + { + send › + CompKey := "" + } + else if Ebene = 5 + { + Send {PgUp} ; Prev + CompKey := "" + } + else if Ebene = 6 + { + Send +{Prev} + CompKey := "" + } + PriorDeadKey := "" +return + +*5:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2075) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2085) + Else If (CompKey = "1") + CompUnicodeChar(0x2155) ; 1/5 + Else If (CompKey = "2") + CompUnicodeChar(0x2156) ; 2/5 + Else If (CompKey = "3") + CompUnicodeChar(0x2157) ; 3/5 + Else If (CompKey = "4") + CompUnicodeChar(0x2158) ; 4/5 + Else If (CompKey = "r_small") + CompUnicodeChar(0x2174) ; römisch v + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2164) ; römisch V + Else + send {blind}5 + If (PriorDeadKey = "comp") + CompKey := "5" + Else + CompKey := "" + } + else if Ebene = 2 + { + send « + CompKey := "" + } + else if Ebene = 3 + { + send ‹ + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x21D2) ; Implikation + CompKey := "" + } + PriorDeadKey := "" +return + +*6:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2076) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2086) + Else If (CompKey = "1") + CompUnicodeChar(0x2159) ; 1/6 + Else If (CompKey = "5") + CompUnicodeChar(0x215A) ; 5/6 + Else If (CompKey = "r_small") + CompUnicodeChar(0x2175) ; römisch vi + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2165) ; römisch VI + Else + send {blind}6 + If (PriorDeadKey = "comp") + CompKey := "6" + Else + CompKey := "" + } + else if Ebene = 2 + { + send € + CompKey := "" + } + else if Ebene = 3 + { + send £ + CompKey := "" + } + else if Ebene = 4 + { + send ¤ + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x21D4) ; Äquivalenz + CompKey := "" + } + PriorDeadKey := "" +return + +*7:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2077) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2087) + Else If (CompKey = "r_small") + CompUnicodeChar(0x2176) ; römisch vii + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2166) ; römisch VII + Else + send {blind}7 + If (PriorDeadKey = "comp") + CompKey := "7" + Else + CompKey := "" + } + else if Ebene = 2 + { + send $ + CompKey := "" + } + else if Ebene = 3 + { + send ¢ + CompKey := "" + } + else if Ebene = 4 + { + send ¥CompKey := "" + } + else if Ebene = 6 + { + Send ¬ + CompKey := "" + } + PriorDeadKey := "" +return + +*8:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2078) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2088) + Else If (CompKey = "1") + CompUnicodeChar(0x215B) ; 1/8 + Else If (CompKey = "3") + CompUnicodeChar(0x215C) ; 3/8 + Else If (CompKey = "5") + CompUnicodeChar(0x215D) ; 5/8 + Else If (CompKey = "7") + CompUnicodeChar(0x215E) ; 7/8 + Else If (CompKey = "r_small") + CompUnicodeChar(0x2177) ; römisch viii + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2167) ; römisch VIII + Else + send {blind}8 + If (PriorDeadKey = "comp") + CompKey := "8" + Else + CompKey := "" + } + else if Ebene = 2 + { + send „ + CompKey := "" + } + else if Ebene = 3 + { + send ‚ + CompKey := "" + } + else if Ebene = 5 + { + Send / + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x2203) ; Existenzquantor + CompKey := "" + } + PriorDeadKey := "" +return + +*9:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2079) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2089) + Else If (CompKey = "r_small") + CompUnicodeChar(0x2178) ; römisch ix + Else If (CompKey = "r_capital") + CompUnicodeChar(0x2168) ; römisch IX + Else + send {blind}9 + If (PriorDeadKey = "comp") + CompKey := "9" + Else + CompKey := "" + } + else if Ebene = 2 + { + send “ + CompKey := "" + } + else if Ebene = 3 + { + send ‘ + CompKey := "" + } + else if Ebene = 5 + { + Send * + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x2200) ; Allquantor + CompKey := "" + } + PriorDeadKey := "" +return + +*0:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2070) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2080) + Else If (CompKey = "r_small_1") + Comp3UnicodeChar(0x2179) ; römisch x + Else If (CompKey = "r_capital_1") + Comp3UnicodeChar(0x2169) ; römisch X + Else + send {blind}0 + If (PriorDeadKey = "comp") + CompKey := "0" + Else + CompKey := "" + } + else if Ebene = 2 + { + send ” + CompKey := "" + } + else if Ebene = 3 + { + send ’ + CompKey := "" + } + else if Ebene = 5 + { + Send - + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x2228) ; logisch oder + CompKey := "" + } + PriorDeadKey := "" +return + +*ß:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}- ; Bind + else if Ebene = 2 + SendUnicodeChar(0x2013) ; Ged + else if Ebene = 3 + SendUnicodeChar(0x2014) + else if Ebene = 4 + SendUnicodeChar(0x254C) + else if Ebene = 5 + SendUnicodeChar(0x2011) + else if Ebene = 6 + SendUnicodeChar(0x2227) ; logisch und + PriorDeadKey := "" CompKey := "" +return + +*´:: + EbeneAktualisieren() + if Ebene = 1 + { + send {´}{space} ; akut, tot + PriorDeadKey := "a1" + } + else if Ebene = 2 + { + send ``{space} + PriorDeadKey := "a2" + } + else if Ebene = 3 + { + send ¸ ; cedilla + PriorDeadKey := "a3" + } + else if Ebene = 4 + { + SendUnicodeChar(0x02DB) ; ogonek + PriorDeadKey := "a4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x02D9) ; punkt oben drüber + PriorDeadKey := "a5" + } + else if Ebene = 6 + { + SendUnicodeChar(0x02DA) ; ring obendrauf + PriorDeadKey := "a6" + } +return + + +/* + ------------------------------------------------------ + Reihe 2 + ------------------------------------------------------ +*/ + +*q:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}x + else if Ebene = 2 + sendinput {blind}X + else if Ebene = 4 + SendUnicodeChar(0x03BE) ;xi + else if Ebene = 6 + SendUnicodeChar(0x039E) ; Xi + PriorDeadKey := "" CompKey := "" +return + + +*w:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E7F) + Else + sendinput {blind}v + } + else if Ebene = 2 + { + If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E7E) + Else + sendinput {blind}V + } + else if Ebene = 3 + send _ + else if Ebene = 5 + Send {Backspace} + else if Ebene = 6 + Send +{Backspace} + PriorDeadKey := "" CompKey := "" +return + + + +*e:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x0142) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x013A) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x013E) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x013C) + Else If (PriorDeadKey = "c5") ; Mittenpunkt + BSSendUnicodeChar(0x0140) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E37) + Else + sendinput {blind}l + If (PriorDeadKey = "comp") ; compose + CompKey := "l_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0139) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x013D) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x013B) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x0141) + Else If (PriorDeadKey = "c5") ; Mittenpunkt + BSSendUnicodeChar(0x013F) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E36) + Else + sendinput {blind}L + If (PriorDeadKey = "comp") ; compose + CompKey := "l_capital" + Else CompKey := "" + } + else if Ebene = 3 + { + send [ + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03BB) ;lambda + CompKey := "" + } + else if Ebene = 5 + { + Sendinput {Blind}{Up} + CompKey := "" + } + else if Ebene = 6 + { + Sendinput {Blind}+{Up} + CompKey := "" + } + PriorDeadKey := "" +return + + +*r:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0109) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0107) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x00E7) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x010B) + Else If ( (CompKey = "o_small") or (CompKey = "o_capital") ) + Send {bs}© + Else + sendinput {blind}c + If (PriorDeadKey = "comp") + CompKey := "c_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0108) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010C) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0106) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x00E6) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x010A) + Else If ( (CompKey = "o_small") or (CompKey = "o_capital") ) + Send {bs}© + Else + sendinput {blind}C + If (PriorDeadKey = "comp") + CompKey = "c_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send ] + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03C7) ;chi + CompKey := "" + } + else if Ebene = 5 + { + Send {Del} + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x039B) ; Lambda + CompKey := "" + } + PriorDeadKey := "" +return + +*t:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0175) + Else + sendinput {blind}w + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0174) + Else + sendinput {blind}W + } + else if Ebene = 3 + send {^}{space} ; untot + else if Ebene = 5 + Send {Insert} + else if Ebene = 6 + Send +{Insert} + PriorDeadKey := "" CompKey := "" +return + +*z:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0137) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E33) + Else + sendinput {blind}k + } + else if Ebene = 2 + { + If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0136) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E32) + Else + sendinput {blind}K + } + else if Ebene = 3 + sendraw ! + else if Ebene = 4 + SendUnicodeChar(0x03BA) ;kappa + else if Ebene = 5 + Send ¡ + PriorDeadKey := "" CompKey := "" +return + +*u:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0125) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0127) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E23) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E25) + Else sendinput {blind}h + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0124) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0126) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E22) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E24) + Else sendinput {blind}H + } + else if Ebene = 3 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x2264) ; kleiner gleich + Else + send {blind}< + } + else if Ebene = 4 + SendUnicodeChar(0x03C8) ;psi + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2077) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2087) + Else + Send 7 + } + else if Ebene = 6 + SendUnicodeChar(0x03A8) ; Psi + PriorDeadKey := "" CompKey := "" +return + +*i:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x011D) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x011F) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0123) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0121) + Else sendinput {blind}g + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x011C) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x011E) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0122) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0120) + Else sendinput {blind}G + } + else if Ebene = 3 + { + If (PriorDeadKey = "c4") ; Querstrich + SendUnicodeChar(0x2265) ; größer gleich + Else + send > + } + else if Ebene = 4 + SendUnicodeChar(0x03B3) ;gamma + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2078) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2088) + Else + Send 8 + } + else if Ebene = 6 + SendUnicodeChar(0x0393) ; Gamma + PriorDeadKey := "" CompKey := "" +return + +*o:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t5") ; durchgestrichen + BSSendUnicodeChar(0x0192) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E1F) + Else sendinput {blind}f + } + else if Ebene = 2 + { + If (PriorDeadKey = "t5") ; durchgestrichen + BSSendUnicodeChar(0x0191) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E1E) + Else sendinput {blind}F + } + else if Ebene = 3 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2259) ; entspricht + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x2245) ; ungefähr gleich + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x2260) ; ungleich + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x2261) ; identisch + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x225A) ; EQUIANGULAR TO + Else If (PriorDeadKey = "a6") ; ring drüber + BSSendUnicodeChar(0x2257) ; ring equal to + Else + send `= + } + else if Ebene = 4 + SendUnicodeChar(0x03C6) ;phi + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2079) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2089) + Else + Send 9 + } + else if Ebene = 6 + SendUnicodeChar(0x03A6) ; Phi + PriorDeadKey := "" CompKey := "" +return + +*p:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}q + else if Ebene = 2 + sendinput {blind}Q + else if Ebene = 3 + send {&} + else if Ebene = 4 + SendUnicodeChar(0x0278) ; Varphi? (latin letter phi) + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x207A) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x208A) + Else + Send {+} + } + else if Ebene = 6 + SendUnicodeChar(0x2202) ; "geschweiftes d" (partielle Ableitung) + PriorDeadKey := "" CompKey := "" +return + +*ü:: + EbeneAktualisieren() + if Ebene = 1 + if GetKeyState("CapsLock","T") + { + SendUnicodeChar(0x1E9E) ; versal-ß + } + else + { + send ß + } + else if Ebene = 2 + if GetKeyState("CapsLock","T") + { + send ß + } + else + { + SendUnicodeChar(0x1E9E) ; versal-ß + } + else if Ebene = 3 + SendUnicodeChar(0x017F) ; langes s + else if Ebene = 4 + SendUnicodeChar(0x03C2) ; varsigma + else if Ebene = 5 + SendUnicodeChar(0x0259) ; schwa + else if Ebene = 6 + SendUnicodeChar(0x018F) ; Schwa + PriorDeadKey := "" CompKey := "" +return + + +*+:: + EbeneAktualisieren() + if Ebene = 1 + { + SendUnicodeChar(0x02DC) ; tilde, tot + PriorDeadKey := "t1" + } + else if Ebene = 2 + { + SendUnicodeChar(0x00AF) ; macron, tot + PriorDeadKey := "t2" + } + else if Ebene = 3 + { + SendUnicodeChar(0x00A8) ; Diaerese + PriorDeadKey := "t3" + } + else if Ebene = 4 + { + send " ;doppelakut + PriorDeadKey := "t4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x002F) ; Schrägstrich, tot + PriorDeadKey := "t5" + } + else if Ebene = 6 + { + SendUnicodeChar(0x02CF) ; komma drunter, tot + PriorDeadKey := "t6" + } +return + + +/* + ------------------------------------------------------ + Reihe 3 + ------------------------------------------------------ +*/ + +*a:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00FB) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00FA) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00F9) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ü + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0171) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x016D) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x016B) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0173) + Else If (PriorDeadKey = "a6") ; Ring + BSSendUnicodeChar(0x016F) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0169) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01D4) + Else + sendinput {blind}u + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00DB) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00DA) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00D9) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ü + Else If (PriorDeadKey = "a6") ; Ring + BSSendUnicodeChar(0x016E) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x016C) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0170) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01D3) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x016A) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0172) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0168) + Else + sendinput {blind}U + } + else if Ebene = 3 + send \ + else if Ebene = 5 + Send {blind}{Home} + else if Ebene = 6 + Send {blind}+{Home} + PriorDeadKey := "" CompKey := "" +return + +*s:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00EE) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00ED) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00EC) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ï + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x012B) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x012D) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x012F) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0129) + Else If (PriorDeadKey = "a5") ; (ohne) punkt darüber + BSSendUnicodeChar(0x0131) + Else + sendinput {blind}i + If (PriorDeadKey = "comp") ; compose + CompKey := "i_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00CE) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00CD) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00CC) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ï + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x012A) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x012C) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x012E) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0128) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0130) + Else + sendinput {blind}I + If (PriorDeadKey = "comp") ; compose + CompKey := "i_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send `/ + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03B9) ;iota + CompKey := "" + } + else if Ebene = 5 + { + Sendinput {Blind}{Left} + CompKey := "" + } + else if Ebene = 6 + { + Sendinput {Blind}+{Left} + CompKey := "" + } + PriorDeadKey := "" +return + +*d:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00E2) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00E1) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00E0) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}ä + Else If (PriorDeadKey = "a6") ; Ring + Send {bs}å + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00E3) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0105) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0101) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0103) + Else + sendinput {blind}a + If (PriorDeadKey = "comp") ; compose + CompKey := "a_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00C2) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00C1) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00C0) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}Ä + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00C3) + Else If (PriorDeadKey = "a6") ; Ring + Send {bs}Å + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0100) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0102) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0104) + Else + sendinput {blind}A + If (PriorDeadKey = "comp") ; compose + CompKey := "a_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + sendraw { + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03B1) ;alpha + CompKey := "" + } + else if Ebene = 5 + { + Sendinput {Blind}{Down} + CompKey := "" + } + else if Ebene = 6 + { + Sendinput {Blind}+{Down} + CompKey := "" + } + PriorDeadKey := "" +return + +*f:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00EA) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00E9) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00E8) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ë + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0119) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0113) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0115) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x011B) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0117) + Else If (CompKey = "a_small") ; compose + { + Send {bs}æ + CompKey := "" + } + Else If (CompKey = "o_small") ; compose + { + Send {bs}œ + CompKey := "" + } + Else + sendinput {blind}e + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00CA) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00C9) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00C8) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ë + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x011A) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0112) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0114) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0118) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0116) + Else If (CompKey = "a_capital") ; compose + { + Send {bs}Æ + CompKey := "" + } + Else If (CompKey = "o_capital") ; compose + { + Send {bs}Œ + CompKey := "" + } + Else + sendinput {blind}E + } + else if Ebene = 3 + sendraw } + else if Ebene = 4 + SendUnicodeChar(0x03B5) ;epsilon + else if Ebene = 5 + Sendinput {Blind}{Right} + else if Ebene = 6 + Sendinput {Blind}+{Right} + PriorDeadKey := "" CompKey := "" +return + +*g:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00F4) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00F3) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00F2) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ö + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00F5) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0151) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00F8) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x014D) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x014F) + Else + sendinput {blind}o + If (PriorDeadKey = "comp") ; compose + CompKey := "o_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00D4) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00D3) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00D2) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00D8) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00D5) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0150) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}Ö + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x014C) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x014E) + Else + sendinput {blind}O + If (PriorDeadKey = "comp") ; compose + CompKey := "o_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send * + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03C9) ;omega + CompKey := "" + } + else if Ebene = 5 + { + Send {blind}{End} + CompKey := "" + } + else if Ebene = 6 + { + Send {blind}+{End} + CompKey := "" + } + PriorDeadKey := "" +return + +*h:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x015D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x015B) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0161) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x015F) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E61) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E63) + Else + sendinput {blind}s + If (PriorDeadKey = "comp") + CompKey := "s_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x015C) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0160) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x015A) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x015E) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E60) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E62) + Else + sendinput {blind}S + If (PriorDeadKey = "comp") + CompKey := "s_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send ? + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03C3) ;sigma + CompKey := "" + } + else if Ebene = 5 + { + Send ¿ + CompKey := "" + } + else if Ebene = 6 + { + SendUnicodeChar(0x03A3) ; Sigma + CompKey := "" + } + PriorDeadKey := "" +return + +*j:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0144) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00F1) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0148) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0146) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E45) + Else + sendinput {blind}n + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0147) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00D1) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0143) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0145) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E44) + Else + sendinput {blind}N + } + else if Ebene = 3 + send ( + else if Ebene = 4 + SendUnicodeChar(0x03BD) ;nu + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2074) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2084) + Else + Send 4 + } + PriorDeadKey := "" CompKey := "" +return + +*k:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0155) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0159) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0157) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0E59) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E5B) + Else + sendinput {blind}r + If (PriorDeadKey = "comp") + CompKey := "r_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0158) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0154) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0156) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E58) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E5A) + Else + sendinput {blind}R + If (PriorDeadKey = "comp") + CompKey := "r_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send ) + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03C1) ;rho + CompKey := "" + } + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2075) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2085) + Else + Send 5 + CompKey := "" + } + PriorDeadKey := "" +return + +*l:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0165) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0163) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0167) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E6B) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E6D) + Else + sendinput {blind}t + If (PriorDeadKey = "comp") + CompKey := "t_small" + Else + CompKey := "" + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0164) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0162) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0166) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E6A) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E6C) + Else + sendinput {blind}T + If (PriorDeadKey = "comp") + CompKey := "t_capital" + Else + CompKey := "" + } + else if Ebene = 3 + { + send {blind}- ; Bind + CompKey := "" + } + else if Ebene = 4 + { + SendUnicodeChar(0x03C4) ;tau + CompKey := "" + } + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2076) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2086) + Else + Send 6 + CompKey := "" + } + PriorDeadKey := "" +return + +*ö:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0111) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00F0) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010F) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E0B) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E0D) + Else + sendinput {blind}d + } + else if Ebene = 2 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0110) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00D0) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010E) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E0A) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E0D) + Else sendinput {blind}D + } + else if Ebene = 3 + send : + else if Ebene = 4 + SendUnicodeChar(0x03B4) ;delta + else if Ebene = 5 + Send `, + else if Ebene = 6 + SendUnicodeChar(0x0394) ; Delta + PriorDeadKey := "" CompKey := "" +return + +*ä:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t3") ; Diaerese + Send {bs}ÿ + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00FD) + Else If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0177) + Else + sendinput {blind}y + } + else if Ebene = 2 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00DD) + Else If (PriorDeadKey = "t3") ; Diaerese + Send {bs}Ÿ + Else If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0176) + Else + sendinput {blind}Y + } + else if Ebene = 3 + send @ + else if Ebene = 4 + SendUnicodeChar(0x03C5) ;upsilon + else if Ebene = 5 + Send þ ; thorn + else if Ebene = 6 + Send Þ ; Thorn + PriorDeadKey := "" CompKey := "" +return + +;SC02B (#) wird zu Mod3 + + +/* + ------------------------------------------------------ + Reihe 4 + ------------------------------------------------------ +*/ + +;SC056 (<) wird zu Mod4 + +*y:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ü + else if Ebene = 2 + sendinput {blind}Ü + else if Ebene = 3 + send {blind}{#} + else if Ebene = 5 + Send {Esc} + PriorDeadKey := "" CompKey := "" +return + +*x:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ö + else if Ebene = 2 + sendinput {blind}Ö + else if Ebene = 3 + send $ + else if Ebene = 5 + Send {Tab} + else if Ebene = 6 + Send +{Tab} + PriorDeadKey := "" CompKey := "" +return + +*c:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ä + else if Ebene = 2 + sendinput {blind}Ä + else if Ebene = 3 + send | + else if Ebene = 4 + SendUnicodeChar(0x03B7) ;eta + else if Ebene = 5 + Send {PgDn} ; Next + else if Ebene = 6 + Send +{PgDn} + PriorDeadKey := "" CompKey := "" +return + +*v:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E57) + Else + sendinput {blind}p + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E56) + Else + sendinput {blind}P + } + else if Ebene = 3 + { + If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x2248) + Else + sendraw ~ + } + else if Ebene = 4 + SendUnicodeChar(0x03C0) ;pi + else if Ebene = 5 + Send {Enter} + else if Ebene = 6 + SendUnicodeChar(0x03A0) ; Pi + PriorDeadKey := "" CompKey := "" +return + +*b:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x017E) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x017A) + Else If (PriorDeadKey = "a5") ; punkt drüber + BSSendUnicodeChar(0x017C) + Else If (PriorDeadKey = "c6") ; punkt drunter + BSSendUnicodeChar(0x1E93) + Else + sendinput {blind}z + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x017D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0179) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x017B) + Else If (PriorDeadKey = "c6") ; punkt drunter + BSSendUnicodeChar(0x1E92) + Else + sendinput {blind}Z + } + else if Ebene = 3 + send ``{space} ; untot + else if Ebene = 4 + SendUnicodeChar(0x03B6) ;zeta + else if Ebene = 6 + SendUnicodeChar(0x03A9) ; Omega + PriorDeadKey := "" CompKey := "" +return + +*n:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E03) + Else + sendinput {blind}b + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E02) + Else + sendinput {blind}B + } + else if Ebene = 3 + send {blind}{+} + else if Ebene = 4 + SendUnicodeChar(0x03B2) ;beta + else if Ebene = 6 + SendUnicodeChar(0x221E) ;infty + PriorDeadKey := "" CompKey := "" +return + +*m:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E41) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E43) + Else If ( (CompKey = "t_small") or (CompKey = "t_capital") ) ; compose + CompUnicodeChar(0x2122) ; TM + Else If ( (CompKey = "s_small") or (CompKey = "s_capital") ) ; compose + CompUnicodeChar(0x2120) ; SM + Else + sendinput {blind}m + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E40) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E42) + Else If ( (CompKey = "t_capital") or (CompKey = "t_small") ) ; compose + CompUnicodeChar(0x2122) ; TM + Else If ( (CompKey = "s_capital") or (CompKey = "s_small") ) ; compose + CompUnicodeChar(0x2120) ; SM + Else + sendinput {blind}M + } + else if Ebene = 3 + send `% + else if Ebene = 4 + SendUnicodeChar(0x03BC) ;micro, mu wäre 0x00B5 + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B9) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2081) + Else + Send 1 + } + else if Ebene = 6 + SendUnicodeChar(0x222B) ; Int + PriorDeadKey := "" CompKey := "" +return + +*,:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}, + else if Ebene = 3 + send " + else if Ebene = 4 + SendUnicodeChar(0x03F1) ; varrho + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B2) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2082) + Else + Send 2 + } + else if Ebene = 6 + SendUnicodeChar(0x221A) ; sqrt + PriorDeadKey := "" CompKey := "" +return + +*.:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}. + else if Ebene = 2 + SendUnicodeChar(0x2026) ; ellipse + else if Ebene = 3 + send ' + else if Ebene = 4 + SendUnicodeChar(0x03B8) ;theta + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B3) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2083) + Else + Send 3 + } + else if Ebene = 6 + SendUnicodeChar(0x0398) ; Theta + PriorDeadKey := "" CompKey := "" +return + + +*-:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0135) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01F0) + Else If (CompKey = "i_small") ; compose + CompUnicodeChar(0x0133) ; ij + Else If (CompKey = "l_small") ; compose + CompUnicodeChar(0x01C9) ; lj + Else If (CompKey = "l_capital") ; compose + CompUnicodeChar(0x01C8) ; Lj + Else + sendinput {blind}j + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0134) + Else If (CompKey = "i_capital") ; compose + CompUnicodeChar(0x0132) ; IJ + Else If (CompKey = "l_capital") ; compose + CompUnicodeChar(0x01C7) ; LJ + Else + sendinput {blind}J + } + else if Ebene = 3 + send `; + else if Ebene = 4 + SendUnicodeChar(0x03D1) ; vartheta + else if Ebene = 5 + Send . + else if Ebene = 6 + SendUnicodeChar(0x2207) ; Nabla + PriorDeadKey := "" CompKey := "" +return + +/* + ------------------------------------------------------ + Numpad + ------------------------------------------------------ + + folgende Tasten verhalten sich bei ein- und ausgeschaltetem + NumLock gleich: +*/ + +*NumpadDiv:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadDiv} + else if Ebene = 3 + send ÷ + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2215) ; slash + PriorDeadKey := "" CompKey := "" +return + +*NumpadMult:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadMult} + else if Ebene = 3 + send × + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x22C5) ; cdot + PriorDeadKey := "" CompKey := "" +return + +*NumpadSub:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x207B) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x208B) + Else + send {blind}{NumpadSub} + } + else if Ebene = 3 + SendUnicodeChar(0x2212) ; echtes minus + PriorDeadKey := "" CompKey := "" +return + +*NumpadAdd:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x207A) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x208A) + Else + send {blind}{NumpadAdd} + } + else if Ebene = 3 + send ± + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2213) ; -+ + PriorDeadKey := "" CompKey := "" +return + +*NumpadEnter:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadEnter} + else if Ebene = 3 + SendUnicodeChar(0x2260) ; neq + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2248) ; approx + PriorDeadKey := "" CompKey := "" +return + +/* + folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock + unterschiedlich: + + bei NumLock ein +*/ + + + +*Numpad7:: + EbeneAktualisieren() + if Ebene = 1 + { + send {blind}{Numpad7} + If (PriorDeadKey = "comp") + CompKey := "Num_7" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadHome} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2195) ; Hoch-Runter-Pfeil + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x226A) ; ll + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad8:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x215B) ; 1/8 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x215C) ; 3/8 + Else If (CompKey = "Num_5") + CompUnicodeChar(0x215D) ; 5/8 + Else If (CompKey = "Num_7") + CompUnicodeChar(0x215E) ; 7/8 + Else + send {blind}{Numpad8} + If (PriorDeadKey = "comp") + CompKey := "Num_8" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadUp} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2191) ; uparrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2229) ; intersection + CompKey := "" + } + PriorDeadKey := "" CompKey := "" +return + +*Numpad9:: + EbeneAktualisieren() + if Ebene = 1 + { + send {blind}{Numpad9} + If (PriorDeadKey = "comp") + CompKey := "Num_9" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadPgUp} + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x226B) ; gg + CompKey := "" + } + PriorDeadKey := "" +return + + + +*Numpad4:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x00BC) ; 1/4 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x00BE) ; 3/4 + Else + send {blind}{Numpad4} + If (PriorDeadKey = "comp") + CompKey := "Num_4" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadLeft} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2190) ; leftarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2282) ; subset of + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad5:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2155) ; 1/5 + Else If (CompKey = "Num_2") + CompUnicodeChar(0x2156) ; 2/5 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x2157) ; 3/5 + Else If (CompKey = "Num_4") + CompUnicodeChar(0x2158) ; 4/5 + Else + send {blind}{Numpad5} + If (PriorDeadKey = "comp") + CompKey := "Num_5" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadClear} + CompKey := "" + } + else if Ebene = 3 + { + send † + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x220A) ; small element of + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad6:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2159) ; 1/6 + Else If (CompKey = "Num_5") + CompUnicodeChar(0x215A) ; 5/6 + Else + send {blind}{Numpad6} + If (PriorDeadKey = "comp") + CompKey := "Num_6" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadRight} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2192) ; rightarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2283) ; superset of + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad1:: + EbeneAktualisieren() + if Ebene = 1 + { + send {blind}{Numpad1} + If (PriorDeadKey = "comp") + CompKey := "Num_1" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadEnd} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2264) ; leq + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad2:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x00BD) ; 1/2 + Else + send {blind}{Numpad2} + If (PriorDeadKey = "comp") + CompKey := "Num_2" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadDown} + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2193) ; downarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x222A) ; vereinigt + CompKey := "" + } + PriorDeadKey := "" +return + +*Numpad3:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2153) ; 1/3 + Else If (CompKey = "Num_2") + CompUnicodeChar(0x2154) ; 2/3 + Else + send {blind}{Numpad3} + If (PriorDeadKey = "comp") + CompKey := "Num_3" + Else + CompKey := "" + } + else if Ebene = 2 + send {NumpadPgDn} + else if Ebene = 3 + SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2265) ; geq + PriorDeadKey := "" CompKey := "" +return + +*Numpad0:: + EbeneAktualisieren() + if Ebene = 1 + { + send {blind}{Numpad0} + If (PriorDeadKey = "comp") + CompKey := "Num_0" + Else + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadIns} + CompKey := "" + } + else if Ebene = 3 + { + send `% + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + send ‰ + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadDot:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadDot} + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadDel} + CompKey := "" + } + else if Ebene = 3 + { + send . + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + send `, + CompKey := "" + } + PriorDeadKey := "" +return + +/* + bei NumLock aus +*/ + +*NumpadHome:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadHome} + CompKey := "" + } + else if Ebene = 2 + { + send {Numpad7} + If (PriorDeadKey = "comp") + CompKey := "Num_7" + Else + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x226A) ; ll + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadUp:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadUp} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x215B) ; 1/8 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x215C) ; 3/8 + Else If (CompKey = "Num_5") + CompUnicodeChar(0x215D) ; 5/8 + Else If (CompKey = "Num_7") + CompUnicodeChar(0x215E) ; 7/8 + Else + send {Numpad8} + If (PriorDeadKey = "comp") + CompKey := "Num_8" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2191) ; uparrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2229) ; intersection + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadPgUp:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadPgUp} + CompKey := "" + } + else if Ebene = 2 + { + send {Numpad9} + If (PriorDeadKey = "comp") + CompKey := "Num_9" + Else + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x226B) ; gg + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadLeft:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadLeft} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x00BC) ; 1/4 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x00BE) ; 3/4 + Else + send {Numpad4} + If (PriorDeadKey = "comp") + CompKey := "Num_4" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2190) ; leftarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2282) ; subset of + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadClear:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadClear} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2155) ; 1/5 + Else If (CompKey = "Num_2") + CompUnicodeChar(0x2156) ; 2/5 + Else If (CompKey = "Num_3") + CompUnicodeChar(0x2157) ; 3/5 + Else If (CompKey = "Num_4") + CompUnicodeChar(0x2158) ; 4/5 + Else + send {Numpad5} + If (PriorDeadKey = "comp") + CompKey := "Num_5" + Else + CompKey := "" + } + else if Ebene = 3 + { + send † + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x220A) ; small element of + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadRight:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadRight} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2159) ; 1/6 + Else If (CompKey = "Num_5") + CompUnicodeChar(0x215A) ; 5/6 + Else + send {Numpad6} + If (PriorDeadKey = "comp") + CompKey := "Num_6" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2192) ; rightarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2283) ; superset of + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadEnd:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadEnd} + CompKey := "" + } + else if Ebene = 2 + { + send {Numpad1} + If (PriorDeadKey = "comp") + CompKey := "Num_1" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2264) ; leq + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadDown:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadDown} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x00BD) ; 1/2 + Else + send {Numpad2} + If (PriorDeadKey = "comp") + CompKey := "Num_2" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x2193) ; downarrow + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x222A) ; vereinigt + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadPgDn:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadPgDn} + CompKey := "" + } + else if Ebene = 2 + { + If (CompKey = "Num_1") + CompUnicodeChar(0x2153) ; 1/3 + Else If (CompKey = "Num_2") + CompUnicodeChar(0x2154) ; 2/3 + Else + send {Numpad3} + If (PriorDeadKey = "comp") + CompKey := "Num_3" + Else + CompKey := "" + } + else if Ebene = 3 + { + SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + SendUnicodeChar(0x2265) ; geq + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadIns:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadIns} + CompKey := "" + } + else if Ebene = 2 + { + send {Numpad0} + If (PriorDeadKey = "comp") + CompKey := "Num_0" + Else + CompKey := "" + } + else if Ebene = 3 + { + send `% + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + send ‰ + CompKey := "" + } + PriorDeadKey := "" +return + +*NumpadDel:: + EbeneAktualisieren() + if Ebene = 1 + { + send {NumpadDel} + CompKey := "" + } + else if Ebene = 2 + { + send {NumpadDot} + CompKey := "" + } + else if Ebene = 3 + { + send . + CompKey := "" + } + else if ( (Ebene = 4) or (Ebene = 5) ) + { + send `, + CompKey := "" + } + PriorDeadKey := "" +return + + +/* + ------------------------------------------------------ + Sondertasten + ------------------------------------------------------ +*/ + +*Space:: + EbeneAktualisieren() + if Ebene = 1 + { + If (CompKey = "r_small_1") + Comp3UnicodeChar(0x2170) ; römisch i + Else If (CompKey = "r_capital_1") + Comp3UnicodeChar(0x2160) ; römisch I + Else + Send {blind}{Space} + } + if Ebene = 2 + Send {blind}{Space} + if Ebene = 3 + Send {blind}{Space} + if Ebene = 4 + SendUnicodeChar(0x00A0) ; geschütztes Leerzeichen + else if Ebene = 5 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2070) + Else If (PriorDeadKey = "c4") ; toter - + BSSendUnicodeChar(0x2080) + Else + Send 0 + } + else if Ebene = 6 + SendUnicodeChar(0x202F) ; schmales Leerzeichen + PriorDeadKey := "" CompKey := "" +return + +/* + Folgende Tasten sind nur aufgeführt, um PriorDeadKey zu leeren. + Irgendwie sieht das noch nicht schön aus. Vielleicht lässt sich dieses + Problem irgendwie eleganter lösen... + + Nachtrag: + Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert, + bis eine allgemeinere Lösung gefunden wurde. +*/ + +*Enter:: + sendinput {Blind}{Enter} + PriorDeadKey := "" CompKey := "" +return + +*Backspace:: + sendinput {Blind}{Backspace} + PriorDeadKey := "" CompKey := "" +return + + + +/* +Auf Mod3+Tab liegt Compose. AltTab funktioniert, jedoch ShiftAltTab nicht. +Wenigstens kommt es jetzt nicht mehr zu komischen Ergebnissen, wenn man Tab +nach einem DeadKey drückt... +*/ + +*Tab:: + if ( GetKeyState("SC038","P") ) + { + SC038 & Tab::AltTab ; http://de.autohotkey.com/docs/Hotkeys.htm#AltTabDetail + } + else if GetKeyState("#","P") + { + PriorDeadKey := "comp" + CompKey := "" + } + else + { + send {blind}{Tab} + PriorDeadKey := "" + CompKey := "" + } +return + +*SC038:: ; LAlt, damit AltTab funktioniert + send {blind}{LAlt} + PriorDeadKey := "" CompKey := "" +return + +*Home:: + sendinput {Blind}{Home} + PriorDeadKey := "" CompKey := "" +return + +*End:: + sendinput {Blind}{End} + PriorDeadKey := "" CompKey := "" +return + +*PgUp:: + sendinput {Blind}{PgUp} + PriorDeadKey := "" CompKey := "" +return + +*PgDn:: + sendinput {Blind}{PgDn} + PriorDeadKey := "" CompKey := "" +return + +*Up:: + sendinput {Blind}{Up} + PriorDeadKey := "" CompKey := "" +return + +*Down:: + sendinput {Blind}{Down} + PriorDeadKey := "" CompKey := "" +return + +*Left:: + sendinput {Blind}{Left} + PriorDeadKey := "" CompKey := "" +return + +*Right:: + sendinput {Blind}{Right} + PriorDeadKey := "" CompKey := "" +return + + +/* + ------------------------------------------------------ + Funktionen + ------------------------------------------------------ +*/ + +EbeneAktualisieren() +{ + global + Ebene = 1 + + ; ist Shift down? + if ( GetKeyState("Shift","P") ) + { + Ebene += 1 + } + ; ist Mod3 down? + if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) + { + Ebene += 2 + } + + ; ist Mod4 down? Mod3 hat Vorrang! + else if ( GetKeyState("<","P") or GetKeyState("SC138","P") ) + { + Ebene += 4 + } +} + + +/************************* + Alte Methoden +*************************/ + +/* +Unicode(code) +{ + saved_clipboard := ClipboardAll + Transform, Clipboard, Unicode, %code% + sendplay ^v + Clipboard := saved_clipboard +} + +BSUnicode(code) +{ + saved_clipboard := ClipboardAll + Transform, Clipboard, Unicode, %code% + sendplay {bs}^v + Clipboard := saved_clipboard +} +*/ + +SendUnicodeChar(charCode) +{ + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + +BSSendUnicodeChar(charCode) +{ + send {bs} + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + +CompUnicodeChar(charCode) +{ + send {bs} + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + +Comp3UnicodeChar(charCode) +{ + send {bs} + send {bs} + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + + +EncodeInteger(ref, val) +{ + DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) +} + + +/* + ------------------------------------------------------ + Shift+Pause "pausiert" das Script. + ------------------------------------------------------ +*/ + ++pause::suspend + +; ------------------------------------ + +togglesuspend: + if state <> + { + state = + menu, tray, rename, %enable%, %disable% + } + else + { + state = : Deaktiviert + menu, tray, rename, %disable%, %enable% + } + + menu, tray, tip, %name%%state% + suspend +return + + +help: + Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm +return + + +about: + msgbox, 64, %name% – Ergonomische Tastaturbelegung, + ( + %name% + `nDas Neo-Layout ersetzt das übliche deutsche + Tastaturlayout mit der Alternative Neo, + beschrieben auf http://neo-layout.org/. + `nDazu sind keine Administratorrechte nötig. + `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke + abgefangen und statt dessen eine Übersetzung weitergeschickt. + `nDies geschieht transparent für den Anwender, + es muss nichts installiert werden. + `nDie Zeichenübersetzung kann leicht über das Icon im + Systemtray deaktiviert werden. `n + ) +return + + +neo: + run http://neo-layout.org/ +return + +autohotkey: + run http://autohotkey.com/ +return + +open: + ListLines ; shows the Autohotkey window +return + +edit: + edit +return + +reload: + Reload +return + +hide: + menu, tray, noicon +return + +exitprogram: + exitapp +return \ No newline at end of file diff --git a/autohotkey/neo20-all-in-one.exe b/autohotkey/neo20-all-in-one.exe new file mode 100644 index 0000000..31a37b5 Binary files /dev/null and b/autohotkey/neo20-all-in-one.exe differ diff --git a/autohotkey/neo20_mod-test.ahk b/autohotkey/neo20_mod-test.ahk new file mode 100644 index 0000000..bb7b736 --- /dev/null +++ b/autohotkey/neo20_mod-test.ahk @@ -0,0 +1,2210 @@ +/* + Titel: NEO 2.0 beta Autohotkey-Treiber + $Revision: 483 $ + $Date: 2008-04-15 12:53:09 +0200 (Di, 15 Apr 2008) $ + Autor: Stefan Mayer + Basiert auf: neo20-all-in-one.ahk vom 29.06.2007 + + TODO: - ausgiebig testen... + - Menü des Tasksymbols + - Bessere Lösung für das leeren von PriorDeadKey finden, damit die Sondertasten + nicht mehr abgefangen werden müssen. + - Ebene 4 und 5 tauschen (im Programmcode, in der Doku ists schon) + - CapsLock auf 1. und 2. Ebene einbauen: + Die Buchstaben reagieren richtig auf CapsLock, da hier "sendinput {blind}" + verwendet wird. Bei anderen Tasten muss CapsLock in der ersten und zweiten Ebene + explizit abgefragt werden. + (Lässt sich das elegant in eine Funktion auslagern?) + |------------------| + | - Compose-Taste | + |------------------| + Ideen: - Symbol ändern (Neo-Logo abwarten) + - bei Ebene 4 rechte Hand (Numpad) z.B. Numpad5 statt 5 senden + CHANGES: - Kein Parsen über die Zwischenablage mehr + - Vista-kompatibel + - Ebene 6 über Mod3+Mod4 +*/ + +; aus Noras script kopiert: +#usehook on +#singleinstance force +#LTrim + ; Quelltext kann eingerückt werden, + ; msgbox ist trotzdem linksbündig + +SendMode Input +SetTitleMatchMode 2 + +;name = NEO 2.0 +;enable = Aktiviere %name% +;disable = Deaktiviere %name% + +; Überprüfung auf deutsches Tastaturlayout +; ---------------------------------------- + +regread, inputlocale, HKEY_CURRENT_USER, Keyboard Layout\Preload, 1 +regread, inputlocalealias, HKEY_CURRENT_USER + , Keyboard Layout\Substitutes, %inputlocale% +if inputlocalealias <> + inputlocale = %inputlocalealias% +if inputlocale <> 00000407 +{ + suspend + regread, inputlocale, HKEY_LOCAL_MACHINE + , SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale% + , Layout Text + msgbox, 48, Warnung!, + ( + Nicht kompatibles Tastaturlayout: + `t%inputlocale% + `nDas deutsche QWERTZ muss als Standardlayout eingestellt + sein, damit %name% wie erwartet funktioniert. + `nÄndern Sie die Tastatureinstellung unter + `tSystemsteuerung + `t-> Regions- und Sprachoptionen + `t-> Sprachen + `t-> Details... `n + ) + exitapp +} + +/* + Variablen initialisieren +*/ + +Ebene = 1 +PriorDeadKey := "" + + +/* + ------------------------------------------------------ + Modifier + ------------------------------------------------------ +*/ + +; CapsLock durch Mod3+Mod3 +*#:: +*CapsLock:: + if GetKeyState("#","P") and GetKeyState("CapsLock","P") + { + if GetKeyState("CapsLock","T") + { + setcapslockstate, off + } + else + { + setcapslockstate, on + } + } +return + +; KP_Decimal durch Mod4+Mod4 +*<:: +*SC138:: + if GetKeyState("<","P") and GetKeyState("SC138","P") + { + send {numpaddot} + } + return + + +/* + Ablauf bei toten Tasten: + 1. Ebene Aktualisieren + 2. Abhängig von der Variablen "Ebene" Zeichen ausgeben und die Variable "PriorDeadKey" setzen + + Ablauf bei "lebenden" (sagt man das?) Tasten: + 1. Ebene Aktualisieren + 2. Abhängig von den Variablen "Ebene" und "PriorDeadKey" Zeichen ausgeben + 3. "PriorDeadKey" mit leerem String überschreiben + + ------------------------------------------------------ + Reihe 1 + ------------------------------------------------------ +*/ + +*^:: + EbeneAktualisieren() + if Ebene = 1 + { + SendUnicodeChar(0x02C6) ; circumflex, tot + PriorDeadKey := "c1" + } + else if Ebene = 2 + { + SendUnicodeChar(0x02C7) ; caron, tot + PriorDeadKey := "c2" + } + else if Ebene = 3 + { + SendUnicodeChar(0x02D8) ; brevis + PriorDeadKey := "c3" + } + else if Ebene = 4 + { + send - ; querstrich, tot + PriorDeadKey := "c4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x00B7) ; Mittenpunkt, tot + PriorDeadKey := "c5" + } + else if Ebene = 7 + { + Send . ; punkt darunter (colon) + PriorDeadKey := "c6" + } +return + +*1:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex 1 + BSSendUnicodeChar(0x00B9) + Else + send {blind}1 + } + else if Ebene = 2 + send ° + else if Ebene = 4 + SendUnicodeChar(0x2640) ; Piktogramm weiblich + else if Ebene = 5 + SendUnicodeChar(0x2022) ; bullet + else if Ebene = 7 + Send ¬ + PriorDeadKey := "" +return + +*2:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B2) + Else + send {blind}2 + } + else if Ebene = 2 + SendUnicodeChar(0x2116) ; numero + else if Ebene = 4 + SendUnicodeChar(0x26A5) ; Piktogramm Zwitter + else if Ebene = 5 + SendUnicodeChar(0x2023) ; aufzaehlungspfeil + else if Ebene = 7 + SendUnicodeChar(0x2228) ; logisch oder + PriorDeadKey := "" +return + +*3:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00B3) + Else + send {blind}3 + } + else if Ebene = 2 + send § + else if Ebene = 4 + SendUnicodeChar(0x2642) ; Piktogramm männlich + else if Ebene = 7 + SendUnicodeChar(0x2227) ; logisch und + PriorDeadKey := "" +return + +*4:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2074) + Else + send {blind}4 + } + else if Ebene = 2 + send » + else if Ebene = 3 + send › + else if Ebene = 5 + Send {PgUp} ; Prev + else if Ebene = 6 + Send +{Prev} + else if Ebene = 7 + SendUnicodeChar(0x22A5) ; Up Tack + PriorDeadKey := "" +return + +*5:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2075) + Else + send {blind}5 + } + else if Ebene = 2 + send « + else if Ebene = 3 + send ‹ + else if Ebene = 7 + SendUnicodeChar(0x2221) ; gemessener Winkel + PriorDeadKey := "" +return + +*6:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2076) + Else + send {blind}6 + } + else if Ebene = 2 + send $ + else if Ebene = 3 + send £ + else if Ebene = 5 + send ¤ + else if Ebene = 7 + SendUnicodeChar(0x2225) ; parallel zu + PriorDeadKey := "" +return + +*7:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2077) + Else + send {blind}7 + } + else if Ebene = 2 + send € + else if Ebene = 3 + send ¢ + else if Ebene = 4 + SendUnicodeChar(0x03F0) ; varkappa + else if Ebene = 5 + send ¥ + else if Ebene = 7 + SendUnicodeChar(0x2209) ; nicht Element von + PriorDeadKey := "" +return + +*8:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2078) + Else + send {blind}8 + } + else if Ebene = 2 + send „ + else if Ebene = 3 + send ‚ + else if Ebene = 5 + Send / + else if Ebene = 7 + SendUnicodeChar(0x2204) ; Nicht-Existenzquantor + PriorDeadKey := "" +return + +*9:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2079) + Else + send {blind}9 + } + else if Ebene = 2 + send “ + else if Ebene = 3 + send ‘ + else if Ebene = 5 + Send * + else if Ebene = 7 + SendUnicodeChar(0x2226) ; Nicht parallel zu + PriorDeadKey := "" +return + +*0:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2070) + Else + send {blind}0 + } + else if Ebene = 2 + send ” + else if Ebene = 3 + send ’ + else if Ebene = 5 + Send - + else if Ebene = 7 + SendUnicodeChar(0x2205) ; Leere Menge + PriorDeadKey := "" +return + +*ß:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}- ; Bind + else if Ebene = 2 + SendUnicodeChar(0x2013) ; Ged + else if Ebene = 3 + SendUnicodeChar(0x2014) + else if Ebene = 4 + SendUnicodeChar(0x2011) + else if Ebene = 7 + SendUnicodeChar(0x254C) + PriorDeadKey := "" +return + +*´:: + EbeneAktualisieren() + if Ebene = 1 + { + send {´}{space} ; akut, tot + PriorDeadKey := "a1" + } + else if Ebene = 2 + { + send ``{space} + PriorDeadKey := "a2" + } + else if Ebene = 3 + { + send ¸ ; cedilla + PriorDeadKey := "a3" + } + else if Ebene = 4 + { + SendUnicodeChar(0x02DB) ; ogonek + PriorDeadKey := "a4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x02D9) ; punkt oben drüber + PriorDeadKey := "a5" + } + else if Ebene = 7 + { + SendUnicodeChar(0x02DA) ; ring obendrauf + PriorDeadKey := "a6" + } +return + + +/* + ------------------------------------------------------ + Reihe 2 + ------------------------------------------------------ +*/ + +*q:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}x + else if Ebene = 2 + sendinput {blind}X + else if Ebene = 3 + send @ + else if Ebene = 4 + SendUnicodeChar(0x03BE) ;xi + else if Ebene = 5 + send @ ; Redundanz + else if Ebene = 7 + SendUnicodeChar(0x039E) ; Xi + PriorDeadKey := "" +return + + +*w:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E7F) + Else + sendinput {blind}v + } + else if Ebene = 2 + { + If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E7E) + Else + sendinput {blind}V + } + else if Ebene = 3 + send _ + else if Ebene = 4 + SendUnicodeChar(0x03F5) ; varepsilon + else if Ebene = 5 + Send {Backspace} + else if Ebene = 7 + SendUnicodeChar(0x2259) ; estimates + PriorDeadKey := "" +return + + + +*e:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x0142) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x013A) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x013E) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x013C) + Else If (PriorDeadKey = "c5") ; Mittenpunkt + BSSendUnicodeChar(0x0140) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E37) + Else + sendinput {blind}l + } + else if Ebene = 2 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0139) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x013D) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x013B) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x0141) + Else If (PriorDeadKey = "c5") ; Mittenpunkt + BSSendUnicodeChar(0x013F) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E36) + Else + sendinput {blind}L + } + else if Ebene = 3 + send [ + else if Ebene = 4 + SendUnicodeChar(0x03BB) ;lambda + else if Ebene = 5 + Sendinput {Blind}{Up} + else if Ebene = 6 + Sendinput {Blind}+{Up} + else if Ebene = 7 + SendUnicodeChar(0x039B) ; Lambda + PriorDeadKey := "" +return + + +*r:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0109) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0107) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x00E7) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x010B) + Else + sendinput {blind}c + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0108) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010C) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0106) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x00E6) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x010A) + Else + sendinput {blind}C + } + else if Ebene = 3 + send ] + else if Ebene = 4 + SendUnicodeChar(0x03C7) ;chi + else if Ebene = 5 + Send {Tab} + else if Ebene = 6 + Send +{Tab} + else if Ebene = 7 + SendUnicodeChar(0x2102) ; Komplexe Zahlen + PriorDeadKey := "" +return + +*t:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0175) + Else + sendinput {blind}w + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0174) + Else + sendinput {blind}W + } + else if Ebene = 3 + send {^}{space} ; untot + else if Ebene = 4 + SendUnicodeChar(0x03C9) ; omega + else if Ebene = 5 + Send {Insert} + else if Ebene = 6 + Send +{Insert} + else if Ebene = 7 + SendUnicodeChar(0x03A9) ; Omega + PriorDeadKey := "" +return + +*z:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0137) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E33) + Else + sendinput {blind}k + } + else if Ebene = 2 + { + If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0136) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E32) + Else + sendinput {blind}K + } + else if Ebene = 3 + sendraw ! + else if Ebene = 4 + SendUnicodeChar(0x03BA) ;kappa + else if Ebene = 5 + Send ¡ + else if Ebene = 7 + SendUnicodeChar(0x221A) ; Wurzelzeichen + PriorDeadKey := "" +return + +*u:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0125) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0127) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E23) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E25) + Else sendinput {blind}h + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0124) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0126) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E22) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E24) + Else sendinput {blind}H + } + else if Ebene = 3 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x2264) ; kleiner gleich + Else + send {blind}< + } + else if Ebene = 4 + SendUnicodeChar(0x03C8) ;psi + else if Ebene = 5 + Send 7 + else if Ebene = 7 + SendUnicodeChar(0x03A8) ; Psi + PriorDeadKey := "" +return + +*i:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x011D) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x011F) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0123) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0121) + Else sendinput {blind}g + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x011C) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x011E) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0122) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0120) + Else sendinput {blind}G + } + else if Ebene = 3 + { + If (PriorDeadKey = "c4") ; Querstrich + SendUnicodeChar(0x2265) ; größer gleich + Else + send > + } + else if Ebene = 4 + SendUnicodeChar(0x03B3) ;gamma + else if Ebene = 5 + Send 8 + else if Ebene = 7 + SendUnicodeChar(0x0393) ; Gamma + PriorDeadKey := "" +return + +*o:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t5") ; durchgestrichen + BSSendUnicodeChar(0x0192) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E1F) + Else sendinput {blind}f + } + else if Ebene = 2 + { + If (PriorDeadKey = "t5") ; durchgestrichen + BSSendUnicodeChar(0x0191) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E1E) + Else sendinput {blind}F + } + else if Ebene = 3 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x2259) ; entspricht + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x2245) ; ungefähr gleich + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x2260) ; ungleich + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x2261) ; identisch + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x225A) ; EQUIANGULAR TO + Else If (PriorDeadKey = "a6") ; ring drüber + BSSendUnicodeChar(0x2257) ; ring equal to + Else + send `= + } + else if Ebene = 4 + SendUnicodeChar(0x0278) ; latin small letter phi + else if Ebene = 5 + Send 9 + else if Ebene = 7 + SendUnicodeChar(0x03A6) ; Phi + PriorDeadKey := "" +return + +*p:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}q + else if Ebene = 2 + sendinput {blind}Q + else if Ebene = 3 + send {&} + else if Ebene = 4 + SendUnicodeChar(0x03C6) ; phi + else if Ebene = 5 + Send {+} + else if Ebene = 7 + SendUnicodeChar(0x211A) ; Rationale Zahlen + PriorDeadKey := "" +return + +*ü:: + EbeneAktualisieren() + if Ebene = 1 + if GetKeyState("CapsLock","T") + { + SendUnicodeChar(0x1E9E) ; versal-ß + } + else + { + send ß + } + else if Ebene = 2 + if GetKeyState("CapsLock","T") + { + send ß + } + else + { + SendUnicodeChar(0x1E9E) ; versal-ß + } + else if Ebene = 3 + SendUnicodeChar(0x017F) ; langes s + else if Ebene = 4 + SendUnicodeChar(0x03C2) ; varsigma + else if Ebene = 7 + SendUnicodeChar(0x2218) ; Ring Operator + PriorDeadKey := "" +return + + +*+:: + EbeneAktualisieren() + if Ebene = 1 + { + SendUnicodeChar(0x02DC) ; tilde, tot + PriorDeadKey := "t1" + } + else if Ebene = 2 + { + SendUnicodeChar(0x00AF) ; macron, tot + PriorDeadKey := "t2" + } + else if Ebene = 3 + { + SendUnicodeChar(0x00A8) ; Diaerese + PriorDeadKey := "t3" + } + else if Ebene = 4 + { + send " ;doppelakut + PriorDeadKey := "t4" + } + else if Ebene = 5 + { + SendUnicodeChar(0x002F) ; Schrägstrich, tot + PriorDeadKey := "t5" + } + else if Ebene = 7 + { + SendUnicodeChar(0x02CF) ; komma drunter, tot + PriorDeadKey := "t6" + } +return + + +/* + ------------------------------------------------------ + Reihe 3 + ------------------------------------------------------ +*/ + +*a:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00FB) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00FA) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00F9) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ü + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0171) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x016D) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x016B) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0173) + Else If (PriorDeadKey = "a6") ; Ring + BSSendUnicodeChar(0x016F) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0169) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01D4) + Else + sendinput {blind}u + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00DB) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00DA) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00D9) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ü + Else If (PriorDeadKey = "a6") ; Ring + BSSendUnicodeChar(0x016E) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x016C) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0170) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01D3) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x016A) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0172) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0168) + Else + sendinput {blind}U + } + else if Ebene = 3 + send \ + else if Ebene = 5 + Send {blind}{Home} + else if Ebene = 6 + Send {blind}+{Home} + else if Ebene = 7 + SendUnicodeChar(0x222E) ; Contour Integral + PriorDeadKey := "" +return + +*s:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00EE) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00ED) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00EC) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ï + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x012B) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x012D) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x012F) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0129) + Else If (PriorDeadKey = "a5") ; (ohne) punkt darüber + BSSendUnicodeChar(0x0131) + Else + sendinput {blind}i + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00CE) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00CD) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00CC) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ï + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x012A) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x012C) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x012E) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x0128) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0130) + Else + sendinput {blind}I + } + else if Ebene = 3 + send `/ + else if Ebene = 4 + SendUnicodeChar(0x03B9) ;iota + else if Ebene = 5 + Sendinput {Blind}{Left} + else if Ebene = 6 + Sendinput {Blind}+{Left} + else if Ebene = 7 + sendUnicodeChar(0x222B) ; Integral + PriorDeadKey := "" +return + +*d:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00E2) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00E1) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00E0) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}ä + Else If (PriorDeadKey = "a6") ; Ring + Send {bs}å + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00E3) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0105) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0101) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0103) + Else + sendinput {blind}a + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00C2) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00C1) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00C0) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}Ä + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00C3) + Else If (PriorDeadKey = "a6") ; Ring + Send {bs}Å + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0100) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0102) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0104) + Else + sendinput {blind}A + } + else if Ebene = 3 + sendraw { + else if Ebene = 4 + SendUnicodeChar(0x03B1) ;alpha + else if Ebene = 5 + Sendinput {Blind}{Down} + else if Ebene = 6 + Sendinput {Blind}+{Down} + else if Ebene = 7 + SendUnicodeChar(0x2200) ; For All + PriorDeadKey := "" +return + +*f:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00EA) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00E9) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00E8) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ë + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0119) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0113) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0115) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x011B) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0117) + Else + sendinput {blind}e + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00CA) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00C9) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00C8) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}Ë + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x011A) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x0112) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x0114) + Else If (PriorDeadKey = "a4") ; ogonek + BSSendUnicodeChar(0x0118) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0116) + Else + sendinput {blind}E + } + else if Ebene = 3 + sendraw } + else if Ebene = 4 + SendUnicodeChar(0x03B5) ;epsilon + else if Ebene = 5 + Sendinput {Blind}{Right} + else if Ebene = 6 + Sendinput {Blind}+{Right} + else if Ebene = 7 + SendUnicodeChar(0x2203) ; Existensquantor + PriorDeadKey := "" +return + +*g:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00F4) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00F3) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00F2) + Else If (PriorDeadKey = "t3") ; Diaerese + Send, {bs}ö + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00F5) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0151) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00F8) + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x014D) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x014F) + Else + sendinput {blind}o + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x00D4) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00D3) + Else If (PriorDeadKey = "a2") ; grave + BSSendUnicodeChar(0x00D2) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00D8) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00D5) + Else If (PriorDeadKey = "t4") ; doppelakut + BSSendUnicodeChar(0x0150) + Else If (PriorDeadKey = "t3") ; Diaerese + send {bs}Ö + Else If (PriorDeadKey = "t2") ; macron + BSSendUnicodeChar(0x014C) + Else If (PriorDeadKey = "c3") ; brevis + BSSendUnicodeChar(0x014E) + Else + sendinput {blind}O + } + else if Ebene = 3 + send * + else if Ebene = 4 + SendUnicodeChar(0x03C9) ;omega + else if Ebene = 5 + Send {blind}{End} + else if Ebene = 6 + Send {blind}+{End} + else if Ebene = 7 + SendUnicodeChar(0x2208) ; Element von + PriorDeadKey := "" +return + +*h:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x015D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x015B) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0161) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x015F) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E61) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E63) + Else + sendinput {blind}s + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x015C) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0160) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x015A) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x015E) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E60) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E62) + Else + sendinput {blind}S + } + else if Ebene = 3 + send ? + else if Ebene = 4 + SendUnicodeChar(0x03C3) ;sigma + else if Ebene = 5 + Send ¿ + else if Ebene = 7 + SendUnicodeChar(0x03A3) ; Sigma + PriorDeadKey := "" +return + +*j:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0144) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00F1) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0148) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0146) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E45) + Else + sendinput {blind}n + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0147) + Else If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x00D1) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0143) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0145) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E44) + Else + sendinput {blind}N + } + else if Ebene = 3 + send ( + else if Ebene = 4 + SendUnicodeChar(0x03BD) ;nu + else if Ebene = 5 + Send 4 + else if Ebene = 7 + SendUnicodeChar(0x2115) ; Natürliche Zahlen + PriorDeadKey := "" +return + +*k:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0155) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0159) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0157) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x0E59) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E5B) + Else + sendinput {blind}r + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0158) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0154) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0156) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E58) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E5A) + Else + sendinput {blind}R + } + else if Ebene = 3 + send ) + else if Ebene = 4 + SendUnicodeChar(0x03C1) ;rho + else if Ebene = 5 + Send 5 + else if Ebene = 7 + SendUnicodeChar(0x211D) ; Rationale Zahlen + PriorDeadKey := "" +return + +*l:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0165) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0163) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0167) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E6B) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E6D) + Else + sendinput {blind}t + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x0164) + Else If (PriorDeadKey = "a3") ; cedilla + BSSendUnicodeChar(0x0162) + Else If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0166) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E6A) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E6C) + Else + sendinput {blind}T + } + else if Ebene = 3 + send {blind}- ; Bind + else if Ebene = 4 + SendUnicodeChar(0x03C4) ;tau + else if Ebene = 5 + Send 6 + else if Ebene = 7 + SendUnicodeChar(0x2202) ; partielle Ableitung + PriorDeadKey := "" +return + +*ö:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0111) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00F0) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010F) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E0B) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E0D) + Else + sendinput {blind}d + } + else if Ebene = 2 + { + If (PriorDeadKey = "c4") ; Querstrich + BSSendUnicodeChar(0x0110) + Else If (PriorDeadKey = "t5") ; Schrägstrich + BSSendUnicodeChar(0x00D0) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x010E) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E0A) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E0D) + Else sendinput {blind}D + } + else if Ebene = 3 + send : + else if Ebene = 4 + SendUnicodeChar(0x03B4) ;delta + else if Ebene = 5 + Send `, + else if Ebene = 7 + SendUnicodeChar(0x0394) ; Delta + PriorDeadKey := "" +return + +*ä:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "t3") ; Diaerese + Send {bs}ÿ + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00FD) + Else If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0177) + Else + sendinput {blind}y + } + else if Ebene = 2 + { + If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x00DD) + Else If (PriorDeadKey = "t3") ; Diaerese + Send {bs}Ÿ + Else If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0176) + Else + sendinput {blind}Y + } + else if Ebene = 4 + SendUnicodeChar(0x03C5) ;upsilon + else if Ebene = 5 + SendUnicodeChar(0x2207) ; nabla + PriorDeadKey := "" +return + +;SC02B (#) wird zu Mod3 + + +/* + ------------------------------------------------------ + Reihe 4 + ------------------------------------------------------ +*/ + +;SC056 (<) wird zu Mod4 + +*y:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ü + else if Ebene = 2 + sendinput {blind}Ü + else if Ebene = 3 + send {#} + else if Ebene = 5 + Send {Esc} + else if Ebene = 7 + SendUnicodeChar(0x221D) ; proportional zu + PriorDeadKey := "" +return + +*x:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ö + else if Ebene = 2 + sendinput {blind}Ö + else if Ebene = 3 + send $ + else if Ebene = 5 + Send {Del} + else if Ebene = 6 + Send +{Del} + else if Ebene = 7 + SendUnicodeChar(0x2111) ; Black-Letter Capital I + PriorDeadKey := "" +return + +*c:: + EbeneAktualisieren() + if Ebene = 1 + sendinput {blind}ä + else if Ebene = 2 + sendinput {blind}Ä + else if Ebene = 3 + send | + else if Ebene = 4 + SendUnicodeChar(0x03B7) ;eta + else if Ebene = 5 + Send {PgDn} ; Next + else if Ebene = 6 + Send +{PgDn} + else if Ebene = 7 + SendUnicodeChar(0x211C) ; Black-Letter Capital I + PriorDeadKey := "" +return + +*v:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E57) + Else + sendinput {blind}p + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E56) + Else + sendinput {blind}P + } + else if Ebene = 3 + { + If (PriorDeadKey = "t1") ; tilde + BSSendUnicodeChar(0x2248) + Else + sendraw ~ + } + else if Ebene = 4 + SendUnicodeChar(0x03C0) ;pi + else if Ebene = 5 + Send {Enter} + else if Ebene = 7 + SendUnicodeChar(0x03A0) ; Pi + PriorDeadKey := "" +return + +*b:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x017E) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x017A) + Else If (PriorDeadKey = "a5") ; punkt drüber + BSSendUnicodeChar(0x017C) + Else If (PriorDeadKey = "c6") ; punkt drunter + BSSendUnicodeChar(0x1E93) + Else + sendinput {blind}z + } + else if Ebene = 2 + { + If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x017D) + Else If (PriorDeadKey = "a1") ; akut + BSSendUnicodeChar(0x0179) + Else If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x017B) + Else If (PriorDeadKey = "c6") ; punkt drunter + BSSendUnicodeChar(0x1E92) + Else + sendinput {blind}Z + } + else if Ebene = 3 + send ``{space} ; untot + else if Ebene = 4 + SendUnicodeChar(0x03B6) ;zeta + else if Ebene = 7 + SendUnicodeChar(0x2124) ; Ganze Zahlen + PriorDeadKey := "" +return + +*n:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E03) + Else + sendinput {blind}b + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E02) + Else + sendinput {blind}B + } + else if Ebene = 3 + send {blind}{+} + else if Ebene = 4 + SendUnicodeChar(0x03B2) ;beta + else if Ebene = 7 + SendUnicodeChar(0x21D2) ; daraus folgt (Implikation) + PriorDeadKey := "" +return + +*m:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E41) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E43) + Else + sendinput {blind}m + } + else if Ebene = 2 + { + If (PriorDeadKey = "a5") ; punkt darüber + BSSendUnicodeChar(0x1E40) + Else If (PriorDeadKey = "c6") ; punkt darunter + BSSendUnicodeChar(0x1E42) + Else + sendinput {blind}M + } + else if Ebene = 3 + send `% + else if Ebene = 4 + SendUnicodeChar(0x03BC) ;micro, mu wäre 0x00B5 + else if Ebene = 5 + Send 1 + else if Ebene = 7 + SendUnicodeChar(0x21D4) ; Äquivalenz + PriorDeadKey := "" +return + +*,:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}, + else if Ebene = 3 + send ' + else if Ebene = 4 + SendUnicodeChar(0x03F1) ; varrho + else if Ebene = 5 + Send 2 + else if Ebene = 7 + SendUnicodeChar(0x21D0) ; Doppelpfeil nach links + PriorDeadKey := "" +return + +*.:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}. + else if Ebene = 2 + SendUnicodeChar(0x2026) ; ellipse + else if Ebene = 3 + send " + else if Ebene = 4 + SendUnicodeChar(0x03B8) ;theta + else if Ebene = 5 + Send 3 + else if Ebene = 7 + SendUnicodeChar(0x0398) ; Theta + PriorDeadKey := "" +return + + +*-:: + EbeneAktualisieren() + if Ebene = 1 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0135) + Else If (PriorDeadKey = "c2") ; caron + BSSendUnicodeChar(0x01F0) + Else + sendinput {blind}j + } + else if Ebene = 2 + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x0134) + Else + sendinput {blind}J + } + else if Ebene = 3 + send `; + else if Ebene = 4 + SendUnicodeChar(0x03D1) ; vartheta + else if Ebene = 5 + Send . + else if Ebene = 7 + SendUnicodeChar(0x2261) ; identisch zu (auch über tote Tasten) + PriorDeadKey := "" +return + +/* + ------------------------------------------------------ + Numpad + ------------------------------------------------------ + + folgende Tasten verhalten sich bei ein- und ausgeschaltetem + NumLock gleich: +*/ + +*NumpadDiv:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadDiv} + else if Ebene = 3 + send ÷ + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2215) ; slash + PriorDeadKey := "" +return + +*NumpadMult:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadMult} + else if Ebene = 3 + send × + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x22C5) ; cdot + PriorDeadKey := "" +return + +*NumpadSub:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x207B) + Else + send {blind}{NumpadSub} + } + else if ( (Ebene = 3) or (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2212) ; echtes minus + PriorDeadKey := "" +return + +*NumpadAdd:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + { + If (PriorDeadKey = "c1") ; circumflex + BSSendUnicodeChar(0x207A) + Else + send {blind}{NumpadAdd} + } + else if Ebene = 3 + send ± + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2213) ; -+ + PriorDeadKey := "" +return + +*NumpadEnter:: + EbeneAktualisieren() + if ( (Ebene = 1) or (Ebene = 2) ) + send {NumpadEnter} + else if Ebene = 3 + SendUnicodeChar(0x2260) ; neq + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2248) ; approx + PriorDeadKey := "" +return + +/* + folgende Tasten verhalten sich bei ein- und ausgeschaltetem NumLock + unterschiedlich: + + bei NumLock ein +*/ + +*Numpad7:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad7} + else if Ebene = 2 + send {NumpadHome} + else if Ebene = 3 + SendUnicodeChar(0x20D7) ; Combining Vektorpfeil + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x226A) ; ll + PriorDeadKey := "" +return + +*Numpad8:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad8} + else if Ebene = 2 + send {NumpadUp} + else if Ebene = 3 + SendUnicodeChar(0x2191) ; uparrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2229) ; intersection + PriorDeadKey := "" +return + +*Numpad9:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad9} + else if Ebene = 2 + send {NumpadPgUp} + else if Ebene = 3 + SendUnicodeChar(0x2297) ; Circled Times + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x226B) ; gg + PriorDeadKey := "" +return + +*Numpad4:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad4} + else if Ebene = 2 + send {NumpadLeft} + else if Ebene = 3 + SendUnicodeChar(0x2190) ; leftarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2282) ; subset of + PriorDeadKey := "" +return + +*Numpad5:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad5} + else if Ebene = 2 + send {€} + else if Ebene = 3 + SendUnicodeChar(0x221E) ; Infty + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x220B) ; Element + PriorDeadKey := "" +return + +*Numpad6:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad6} + else if Ebene = 2 + send {NumpadRight} + else if Ebene = 3 + SendUnicodeChar(0x2192) ; rightarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2283) ; superset of + PriorDeadKey := "" +return + +*Numpad1:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad1} + else if Ebene = 2 + send {NumpadEnd} + else if Ebene = 3 + SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2264) ; leq + PriorDeadKey := "" +return + +*Numpad2:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad2} + else if Ebene = 2 + send {NumpadDown} + else if Ebene = 3 + SendUnicodeChar(0x2193) ; downarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x222A) ; vereinigt + PriorDeadKey := "" +return + +*Numpad3:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad3} + else if Ebene = 2 + send {NumpadPgDn} + else if Ebene = 3 + SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2265) ; geq + PriorDeadKey := "" +return + +*Numpad0:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad0} + else if Ebene = 2 + send {NumpadIns} + else if Ebene = 3 + send `% + else if ( (Ebene = 4) or (Ebene = 5) ) + send ‰ + PriorDeadKey := "" +return + +*NumpadDot:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadDot} + else if Ebene = 2 + send {NumpadDel} + else if Ebene = 3 + send . + else if ( (Ebene = 4) or (Ebene = 5) ) + send `, + PriorDeadKey := "" +return + +/* + bei NumLock aus +*/ + +*NumpadHome:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad7} + else if Ebene = 2 + send {NumpadHome} + else if Ebene = 3 + SendUnicodeChar(0x20D7) ; Combining Vektorpfeil + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x226A) ; ll + PriorDeadKey := "" +return + +*NumpadUp:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadUp} + else if Ebene = 2 + send {Numpad8} + else if Ebene = 3 + SendUnicodeChar(0x2191) ; uparrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2229) ; intersection + PriorDeadKey := "" +return + +*NumpadPgUp:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad9} + else if Ebene = 2 + send {NumpadPgUp} + else if Ebene = 3 + SendUnicodeChar(0x2297) ; Circled Times + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x226B) ; gg + PriorDeadKey := "" +return + +*NumpadLeft:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadLeft} + else if Ebene = 2 + send {Numpad4} + else if Ebene = 3 + SendUnicodeChar(0x2190) ; leftarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2282) ; subset of + PriorDeadKey := "" +return + +*NumpadClear:: + EbeneAktualisieren() + if Ebene = 1 + send {blind}{Numpad5} + else if Ebene = 2 + send {€} + else if Ebene = 3 + SendUnicodeChar(0x221E) ; Infty + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x220B) ; Element + PriorDeadKey := "" +return + +*NumpadRight:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadRight} + else if Ebene = 2 + send {Numpad6} + else if Ebene = 3 + SendUnicodeChar(0x2192) ; rightarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2283) ; superset of + PriorDeadKey := "" +return + +*NumpadEnd:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadEnd} + else if Ebene = 2 + send {Numpad1} + else if Ebene = 3 + SendUnicodeChar(0x21CB) ; LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2264) ; leq + PriorDeadKey := "" +return + +*NumpadDown:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadDown} + else if Ebene = 2 + send {Numpad2} + else if Ebene = 3 + SendUnicodeChar(0x2193) ; downarrow + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x222A) ; vereinigt + PriorDeadKey := "" +return + +*NumpadPgDn:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadPgDn} + else if Ebene = 2 + send {Numpad3} + else if Ebene = 3 + SendUnicodeChar(0x21CC) ; RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON + else if ( (Ebene = 4) or (Ebene = 5) ) + SendUnicodeChar(0x2265) ; geq + PriorDeadKey := "" +return + +*NumpadIns:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadIns} + else if Ebene = 2 + send {Numpad0} + else if Ebene = 3 + send `% + else if ( (Ebene = 4) or (Ebene = 5) ) + send ‰ + PriorDeadKey := "" +return + +*NumpadDel:: + EbeneAktualisieren() + if Ebene = 1 + send {NumpadDel} + else if Ebene = 2 + send {NumpadDot} + else if Ebene = 3 + send . + else if ( (Ebene = 4) or (Ebene = 5) ) + send `, + PriorDeadKey := "" +return + + + +/* + ------------------------------------------------------ + Sondertasten + ------------------------------------------------------ +*/ + +*Space:: + EbeneAktualisieren() + if Ebene = 4 + SendUnicodeChar(0x00A0) ; geschütztes Leerzeichen + else if Ebene = 5 + Send 0 + else if Ebene = 7 + SendUnicodeChar(0x202F) ; schmales Leerzeichen + else + Send {blind}{Space} + PriorDeadKey := "" +return + +/* + Folgende Tasten sind nur aufgeführt, um PriorDeadKey zu leeren. + Irgendwie sieht das noch nicht schön aus. Vielleicht lässt sich dieses + Problem irgendwie eleganter lösen... + + Nachtrag: + Weil es mit Alt+Tab Probleme gab, wird hier jetzt erstmal rumgeflickschustert, + bis eine allgemeinere Lösung gefunden wurde. +*/ + +*Enter:: + sendinput {Blind}{Enter} + PriorDeadKey := "" +return + +*Backspace:: + sendinput {Blind}{Backspace} + PriorDeadKey := "" +return + + + +/* +Tab wurde rausgenommen, weil es Probleme mit AltTab und ShiftAltTab gab. +Allerdings kommt es jetzt zu komischen Ergebnissen, wenn man Tab nach +einem DeadKey drückt... + +*Tab:: + send {Blind}{Tab} + PriorDeadKey := "" +return + +*/ + +*Home:: + sendinput {Blind}{Home} + PriorDeadKey := "" +return + +*End:: + sendinput {Blind}{End} + PriorDeadKey := "" +return + +*PgUp:: + sendinput {Blind}{PgUp} + PriorDeadKey := "" +return + +*PgDn:: + sendinput {Blind}{PgDn} + PriorDeadKey := "" +return + +*Up:: + sendinput {Blind}{Up} + PriorDeadKey := "" +return + +*Down:: + sendinput {Blind}{Down} + PriorDeadKey := "" +return + +*Left:: + sendinput {Blind}{Left} + PriorDeadKey := "" +return + +*Right:: + sendinput {Blind}{Right} + PriorDeadKey := "" +return + + +/* + ------------------------------------------------------ + Funktionen + ------------------------------------------------------ +*/ + +EbeneAktualisieren() +{ + global + Ebene = 1 + + ; ist Shift down? + if ( GetKeyState("Shift","P") ) + { + Ebene += 1 + } + ; ist Mod3 down? + if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) { + ; ist Mod4 down? + if ( GetKeyState("<","P") or GetKeyState("SC138","P") ) { + Ebene +=6 + } + else Ebene += 2 + } + ; ist Mod4 down? Mod3 hat Vorrang! + else if ( GetKeyState("<","P") or GetKeyState("SC138","P") ) { + ; ist Mod3 down? + if ( GetKeyState("CapsLock","P") or GetKeyState("#","P") ) { + Ebene +=6 + } + else Ebene += 4 + } + + return +} + + +/************************* + Alte Methoden +*************************/ + +/* +Unicode(code) +{ + saved_clipboard := ClipboardAll + Transform, Clipboard, Unicode, %code% + sendplay ^v + Clipboard := saved_clipboard +} + +BSUnicode(code) +{ + saved_clipboard := ClipboardAll + Transform, Clipboard, Unicode, %code% + sendplay {bs}^v + Clipboard := saved_clipboard +} +*/ + +SendUnicodeChar(charCode) +{ + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + + +BSSendUnicodeChar(charCode) +{ + send {bs} + VarSetCapacity(ki, 28 * 2, 0) + + EncodeInteger(&ki + 0, 1) + EncodeInteger(&ki + 6, charCode) + EncodeInteger(&ki + 8, 4) + EncodeInteger(&ki +28, 1) + EncodeInteger(&ki +34, charCode) + EncodeInteger(&ki +36, 4|2) + + DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28) +} + + +EncodeInteger(ref, val) +{ + DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val) +} + + +/* + ------------------------------------------------------ + Shift+Pause "pausiert" das Script. + ------------------------------------------------------ +*/ + ++pause::suspend diff --git a/kbdneo2/Quelldateien/README.txt b/kbdneo2/Quelldateien/README.txt new file mode 100644 index 0000000..8d00f7a --- /dev/null +++ b/kbdneo2/Quelldateien/README.txt @@ -0,0 +1,17 @@ +1. WinDDK (Bestandteil von WDK) installieren. + +2. Im Ordner \src\input\layout\all_kbds\kbdneo2 des WDKs einen neuen Ordner namens 'kbdneo2' anlegen. + +3. Alle Quelldateien in diesen Ordner kopieren. + +4. Die Datei 'dirs' im Ordner \src\input\layout\all_kbds\kbdneo2 des WDKs um die Zeile 'kbdneo2' erweitern. Die Datei könnte nun so aussehen: +> DIRS= \ +> kbdfr \ +> kbdgr \ +> kbdneo2 + +5. Mit einem normalem Texteditor können nun die Quelldateien bearbeitet werden. + +6. Zum kompilieren des Treibers die 'Checked Build Environment' starten und zum Ordner mit den Quelldateien wechseln und den Befehl Build ausführen. +> cd src\input\layout\all_kbds\kbdneo2 +> build diff --git a/kbdneo2/Quelldateien/kbdneo2.c b/kbdneo2/Quelldateien/kbdneo2.c new file mode 100644 index 0000000..32e8ec4 --- /dev/null +++ b/kbdneo2/Quelldateien/kbdneo2.c @@ -0,0 +1,804 @@ +/***************************************************************************\ +* Module Name: KBDNEO2.C +* +* keyboard layout for German +* +* Copyright (c) 1985-2000, Microsoft Corporation +* +* History: +\***************************************************************************/ + +#include +#include "kbd.h" +#include "kbdneo2.h" + +#if defined(_M_IA64) +#pragma section(".data") +#define ALLOC_SECTION_LDATA __declspec(allocate(".data")) +#else +#pragma data_seg(".data") +#define ALLOC_SECTION_LDATA +#endif + +/***************************************************************************\ +* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German +\***************************************************************************/ + +static ALLOC_SECTION_LDATA USHORT ausVK[] = { + T00, T01, T02, T03, T04, T05, T06, T07, + T08, T09, T0A, T0B, T0C, T0D, T0E, T0F, + T10, T11, T12, T13, T14, T15, T16, T17, + T18, T19, T1A, T1B, T1C, T1D, T1E, T1F, + T20, T21, T22, T23, T24, T25, T26, T27, + T28, T29, T2A, T2B, T2C, T2D, T2E, T2F, + T30, T31, T32, T33, T34, T35, + + /* + * Right-hand Shift key must have KBDEXT bit set. + */ + T36 | KBDEXT, + + T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot + + T38, T39, T3A, T3B, T3C, T3D, T3E, + T3F, T40, T41, T42, T43, T44, + + /* + * NumLock Key: + * KBDEXT - VK_NUMLOCK is an Extended key + * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL) + */ + T45 | KBDEXT | KBDMULTIVK, + + T46 | KBDMULTIVK, + + /* + * Number Pad keys: + * KBDNUMPAD - digits 0-9 and decimal point. + * KBDSPECIAL - require special processing by Windows + */ + T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home) + T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up), + T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp), + T4A, + T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left), + T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear), + T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right), + T4E, + T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End), + T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down), + T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn), + T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins), + T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del), + + T54, T55, T56, T57, T58, T59, T5A, T5B, + T5C, T5D, T5E, T5F, T60, T61, T62, T63, + T64, T65, T66, T67, T68, T69, T6A, T6B, + T6C, T6D, T6E, T6F, T70, T71, T72, T73, + T74, T75, T76, T77, T78, T79, T7A, T7B, + T7C, T7D, T7E + +}; + +static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = { + { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track + { 0x19, X19 | KBDEXT }, // Speedracer: Next Track + { 0x1D, X1D | KBDEXT }, // RControl + { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute + { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2 + { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause + { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop + { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down + { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up + { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home + { 0x35, X35 | KBDEXT }, // Numpad Divide + { 0x37, X37 | KBDEXT }, // Snapshot + { 0x38, X38 | KBDEXT }, // RMenu + { 0x47, X47 | KBDEXT }, // Home + { 0x48, X48 | KBDEXT }, // Up + { 0x49, X49 | KBDEXT }, // Prior + { 0x4B, X4B | KBDEXT }, // Left + { 0x4D, X4D | KBDEXT }, // Right + { 0x4F, X4F | KBDEXT }, // End + { 0x50, X50 | KBDEXT }, // Down + { 0x51, X51 | KBDEXT }, // Next + { 0x52, X52 | KBDEXT }, // Insert + { 0x53, X53 | KBDEXT }, // Delete + { 0x5B, X5B | KBDEXT }, // Left Win + { 0x5C, X5C | KBDEXT }, // Right Win + { 0x5D, X5D | KBDEXT }, // Application + { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep + { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search + { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites + { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh + { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop + { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward + { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back + { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1 + { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail + { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector + { 0x1C, X1C | KBDEXT }, // Numpad Enter + { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause) + { 0, 0 } +}; + +static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = { + { 0x1D, Y1D }, // Pause + { 0 , 0 } +}; + +/***************************************************************************\ +* aVkToBits[] - map Virtual Keys to Modifier Bits +* +* See kbd.h for a full description. +* +* German Keyboard has only three shifter keys: +* SHIFT (L & R) affects alphabnumeric keys, +* CTRL (L & R) is used to generate control characters +* ALT (L & R) used for generating characters by number with numpad +\***************************************************************************/ +static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = { + { VK_SHIFT , KBDSHIFT }, + { VK_CONTROL , KBDCTRL }, + { VK_MENU , KBDALT }, + { VK_KANA , KBDKANA }, + { 0 , 0 } +}; + +/***************************************************************************\ +* aModification[] - map character modifier bits to modification number +* +* See kbd.h for a full description. +* +\***************************************************************************/ +static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = { + &aVkToBits[0], + 14, + { + // Modifier NEO + // Ebene 1 - nix + // Ebene 2 - Shift + // Ebene 3 - Kana + // Ebene 4 - AltGr + // Ebene 5 - Kana+Shift + // Ebene 6 - AltGr+Kana + // + // Modification# // Keys Pressed + // ============= // ============= + 0, // 0000 + 1, // 0001 Shift + 6, // 0010 Strg + 7, // 0011 Shift + Strg + SHFT_INVALID, // 0100 Menu + SHFT_INVALID, // 0101 Shift + Menu + 3, // 0110 Strg + Menu + SHFT_INVALID, // 0111 Shift + Strg + Menu + 2, // 1000 Kana + 4, // 1001 Shift + Kana + SHFT_INVALID, // 1010 Strg + Kana + SHFT_INVALID, // 1011 Shift + Strg + Kana + SHFT_INVALID, // 1100 Menu + Kana + SHFT_INVALID, // 1101 Shift + Menu + Kana + 5 // 1110 Menu + Strg + Kana + + } +}; + + +/***************************************************************************\ +* +* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states +* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states +* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states +* aVkToWch5[] - Virtual Key to WCHAR translation for 5 shift states +* aVkToWch6[] - Virtual Key to WCHAR translation for 6 shift states +* aVkToWch7[] - Virtual Key to WCHAR translation for 7 shift states +* aVkToWch8[] - Virtual Key to WCHAR translation for 8 shift states +* aVkToWch9[] - Virtual Key to WCHAR translation for 9 shift states +* +* Table attributes: Unordered Scan, null-terminated +* +* Search this table for an entry with a matching Virtual Key to find the +* corresponding unshifted and shifted WCHAR characters. +* +* Special values for VirtualKey (column 1) +* 0xff - dead chars for the previous entry +* 0 - terminate the list +* +* Special values for Attributes (column 2) +* CAPLOK bit - CAPS-LOCK affect this key like SHIFT +* +* Special values for wch[*] (column 3 & 4) +* WCH_NONE - No character +* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none) +* WCH_LGTR - Ligature (generates multiple characters) +* +\***************************************************************************/ + +static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = { +// | | Shift | +// |===========|=========| +{VK_DECIMAL ,0 ,',' ,',' }, +{0 ,0 ,0 ,0 } +}; + +static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = { +// | | SHIFT | KANA | ALT+CTL | +// | |===============|================|===============| +{VK_ADD ,0 ,'+' ,'+' ,0x00b1 ,0x2213 }, +{VK_DIVIDE ,0 ,'/' ,'/' ,0x00f7 ,0x2215 }, +{VK_MULTIPLY ,0 ,'*' ,'*' ,0x00d7 ,0x22c5 }, +{VK_SUBTRACT ,0 ,'-' ,'-' ,WCH_NONE ,0x2052 }, +{0 ,0 ,0 ,0 ,0 ,0 } +}; + +static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = { +// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana | +// | |===============|================|===============|===============|================| +{VK_OEM_1 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD }, +{0xff ,0 ,'^' ,0x030c ,0x0306 ,0x00b7 ,0x0335 ,0x0323 }, +{'1' ,CAPLOK ,'1' ,0x00b0 ,0x00B9 ,0x2022 ,0x2640 ,0x00ac }, +{'3' ,CAPLOK ,'3' ,0x00a7 ,0x00b3 ,WCH_NONE ,0x2640 ,0x2227 }, +{'4' ,CAPLOK ,'4' ,0x00bb ,0x203A ,WCH_NONE ,0x2113 ,0x02d4 }, +{'5' ,CAPLOK ,'5' ,0x00ab ,0x2039 ,WCH_NONE ,0x2020 ,0x2221 }, +{'7' ,CAPLOK ,'7' ,0x0024 ,0x00a5 ,0x00a4 ,0x03f0 ,0x2209 }, +{'8' ,CAPLOK ,'8' ,0x201E ,0x201A ,0x002F ,WCH_NONE ,0x2204 }, +{'9' ,CAPLOK ,'9' ,0x201C ,0x2018 ,0x002A ,WCH_NONE ,0x2226 }, +{'0' ,CAPLOK ,'0' ,0x201D ,0x2019 ,0x002D ,WCH_NONE ,0x2205 }, +{VK_OEM_MINUS ,0 ,'-' ,0x2013 ,0x2014 ,0X2011 ,0x00AD ,0x2227 }, +{VK_OEM_2 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD }, +{0xff ,0 ,0x0301 ,0x0300 ,0x0327 ,0x0307 ,0x0328 ,0x030a }, +{VK_TAB ,0 ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' ,'\t' }, +{'X' ,CAPLOK ,'x' ,'X' ,WCH_NONE ,WCH_NONE ,0x03BE ,0x039E }, +{'V' ,CAPLOK ,'v' ,'V' ,'_' ,'\b' ,WCH_NONE ,0x2259 }, +{'L' ,CAPLOK ,'l' ,'L' ,'[' ,WCH_NONE ,0x03BB ,0x039b }, +{'C' ,CAPLOK ,'c' ,'C' ,']' ,0x007f ,0x03C7 ,0x2102 }, +{'W' ,CAPLOK ,'w' ,'W' ,0x005E ,WCH_NONE ,0x1f7c ,0x03a9 }, +{'K' ,CAPLOK ,'k' ,'K' ,'!' ,0x00A1 ,0x03BA ,0x221a }, +{'H' ,CAPLOK ,'h' ,'H' ,'<' ,'7' ,0x03C8 ,0x03A8 }, +{'G' ,CAPLOK ,'g' ,'G' ,'>' ,'8' ,0x03B3 ,0x0393 }, +{'F' ,CAPLOK ,'f' ,'F' ,'=' ,'9' ,0x03C6 ,0x03A6 }, +{'Q' ,CAPLOK ,'q' ,'Q' ,'&' ,'+' ,0x0278 ,0x211a }, +{'U' ,CAPLOK ,'u' ,'U' ,'\\' ,WCH_NONE ,WCH_NONE ,0x222e }, +{'I' ,CAPLOK ,'i' ,'I' ,'/' ,WCH_NONE ,0x03B9 ,0x222b }, +{'A' ,CAPLOK ,'a' ,'A' ,'{' ,WCH_NONE ,0x03B1 ,0x2200 }, +{'E' ,CAPLOK ,'e' ,'E' ,'}' ,WCH_NONE ,0x03B5 ,0x2203 }, +{'O' ,CAPLOK ,'o' ,'O' ,'*' ,WCH_NONE ,0x03bf ,0x2208 }, +{'S' ,CAPLOK ,'s' ,'S' ,'?' ,0x00BF ,0x03C3 ,0x03A3 }, +{'N' ,CAPLOK ,'n' ,'N' ,'(' ,'4' ,0x03BD ,0x2115 }, +{'R' ,CAPLOK ,'r' ,'R' ,')' ,'5' ,0x03C1 ,0x211d }, +{'T' ,CAPLOK ,'t' ,'T' ,'-' ,'6' ,0x03C4 ,0x2202 }, +{'D' ,CAPLOK ,'d' ,'D' ,':' ,',' ,0x03B4 ,0x0394 }, +{VK_OEM_5 ,CAPLOK ,0x00FC ,0x00DC ,'#' ,0x001b ,WCH_NONE ,0x221d }, +{VK_OEM_6 ,CAPLOK ,0x00F6 ,0x00D6 ,'$' ,'\t' ,WCH_NONE ,0x2111 }, +{VK_OEM_7 ,CAPLOK ,0x00E4 ,0x00C4 ,'|' ,WCH_NONE ,0x03B7 ,0x211c }, +{'P' ,CAPLOK ,'p' ,'P' ,'~' ,'\r' ,0x03C0 ,0x03A0 }, +{'Z' ,CAPLOK ,'z' ,'Z' ,'`' ,WCH_NONE ,0x03B6 ,0x2124 }, +{'B' ,CAPLOK ,'b' ,'B' ,'+' ,WCH_NONE ,0x03B2 ,0x212d }, +{'M' ,CAPLOK ,'m' ,'M' ,'%' ,'1' ,0x00b5 ,0x21d4 }, +{VK_OEM_COMMA ,0 ,',' ,0x22ee ,'\'' ,'2' ,0x03F1 ,0x21d0 }, +{VK_OEM_PERIOD ,0 ,'.' ,0x2026 ,'\"' ,'3' ,0x03B8 ,0x0398 }, +{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 } +}; + +static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = { +// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana | Control | +// | |===============|================|===============|===============|================|===============| +{VK_OEM_3 ,CAPLOK ,0x00df ,0x1E9E ,0x017F ,WCH_NONE ,0x03C2 ,0x018F ,0x2218 }, +{VK_OEM_4 ,0 ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,0x001d }, +{0xff ,0 ,0x0303 ,0x0304 ,0x0308 ,0x0337 ,0x030b ,0x0326 ,WCH_NONE }, +{'Y' ,CAPLOK ,'y' ,'Y' ,'@' ,WCH_NONE ,0x03C5 ,0x2207 ,0x001c }, +{VK_SPACE ,0 ,' ' ,' ' ,0x00A0 ,'0' ,' ' ,0x2009 ,' ' }, +{VK_BACK ,0 ,'\b' ,'\b' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x007f }, +{VK_ESCAPE ,0 ,0x001b ,0x001b ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x001b }, +{VK_RETURN ,0 ,'\r' ,'\r' ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,'\n' }, +{VK_CANCEL ,0 ,0x0003 ,0x0003 ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,0x0003 }, +{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 } +}; + +static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = { +// | | SHIFT | KANA | ALT+CTL | KANA+Shift | ALT+CTL+Kana | Control | Control+Shift | +// | |===============|================|===============|===============|================|===============|===============| +{'2' ,CAPLOK ,'2' ,0x2116 ,0x00b2 ,0x2023 ,0x26A5 ,0x2228 ,WCH_NONE ,0x0000 }, +{'6' ,CAPLOK ,'6' ,0x20ac ,0x00Ac ,0x00a3 ,WCH_NONE ,0x2225 ,WCH_NONE ,0x001e }, +{'J' ,CAPLOK ,'j' ,'J' ,';' ,'.' ,0x03D1 ,0x2261 ,WCH_NONE ,0x001f }, +{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 } +}; + +// Put this last so that VkKeyScan interprets number characters +// as coming from the main section of the kbd (aVkToWch2 and +// aVkToWch5) before considering the numpad (aVkToWch1). + +static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = { + { VK_NUMPAD0 , 0 , '0' }, + { VK_NUMPAD1 , 0 , '1' }, + { VK_NUMPAD2 , 0 , '2' }, + { VK_NUMPAD3 , 0 , '3' }, + { VK_NUMPAD4 , 0 , '4' }, + { VK_NUMPAD5 , 0 , '5' }, + { VK_NUMPAD6 , 0 , '6' }, + { VK_NUMPAD7 , 0 , '7' }, + { VK_NUMPAD8 , 0 , '8' }, + { VK_NUMPAD9 , 0 , '9' }, + { 0 , 0 , '\0' } +}; + +static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = { + { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) }, + { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) }, + { (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) }, + { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) }, + { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) }, + { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) }, + { NULL, 0, 0 }, +}; + +/***************************************************************************\ +* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables +* +* Table attributes: Ordered Scan (by scancode), null-terminated +* +* Only the names of Extended, NumPad, Dead and Non-Printable keys are here. +* (Keys producing printable characters are named by that character) +\***************************************************************************/ + +static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = { + 0x01, L"ESC", + 0x0e, L"R\x00DC" L"CK", + 0x0f, L"TABULATOR", + 0x1c, L"EINGABE", + 0x1d, L"STRG", + 0x2a, L"UMSCHALT", + 0x36, L"UMSCHALT RECHTS", + 0x37, L" (ZEHNERTASTATUR)", + 0x38, L"ALT", + 0x39, L"LEER", + 0x3a, L"FESTSTELL", + 0x3b, L"F1", + 0x3c, L"F2", + 0x3d, L"F3", + 0x3e, L"F4", + 0x3f, L"F5", + 0x40, L"F6", + 0x41, L"F7", + 0x42, L"F8", + 0x43, L"F9", + 0x44, L"F10", + 0x45, L"PAUSE", + 0x46, L"ROLLEN-FESTSTELL", + 0x47, L"7 (ZEHNERTASTATUR)", + 0x48, L"8 (ZEHNERTASTATUR)", + 0x49, L"9 (ZEHNERTASTATUR)", + 0x4a, L"- (ZEHNERTASTATUR)", + 0x4b, L"4 (ZEHNERTASTATUR)", + 0x4c, L"5 (ZEHNERTASTATUR)", + 0x4d, L"6 (ZEHNERTASTATUR)", + 0x4e, L"+ (ZEHNERTASTATUR)", + 0x4f, L"1 (ZEHNERTASTATUR)", + 0x50, L"2 (ZEHNERTASTATUR)", + 0x51, L"3 (ZEHNERTASTATUR)", + 0x52, L"0 (ZEHNERTASTATUR)", + 0x53, L"KOMMA (ZEHNERTASTATUR)", + 0x57, L"F11", + 0x58, L"F12", + 0 , NULL +}; + +static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = { + 0x1c, L"EINGABE (ZEHNERTASTATUR)", + 0x1d, L"STRG-RECHTS", + 0x35, L" (ZEHNERTASTATUR)", + 0x37, L"DRUCK", + 0x38, L"ALT GR", + 0x45, L"NUM-FESTSTELL", + 0x46, L"UNTBR", + 0x47, L"POS1", + 0x48, L"NACH-OBEN", + 0x49, L"BILD-NACH-OBEN", + 0x4b, L"NACH-LINKS", + 0x4d, L"NACH-RECHTS", + 0x4f, L"ENDE", + 0x50, L"NACH-UNTEN", + 0x51, L"BILD-NACH-UNTEN", + 0x52, L"EINFG", + 0x53, L"ENTF", + 0x54, L"<00>", + 0x56, L"HILFE", + 0x5b, L"LINKE WINDOWS", + 0x5c, L"RECHTE WINDOWS", + 0x5d, L"ANWENDUNG", + 0 , NULL +}; + +static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = { + L"^" L"ZIRKUMFLEX", + L"\x030c" L"CARON", + L"\x0306" L"BREVIS", + L"\x0335" L"QUERSTRICH", + L"\x00b7" L"DOT_MID", + L"\x0323" L"DOT_BELOW", + + L"\x0301" L"AKUT", + L"\x0300" L"GRAVIS", + L"\x0327" L"CEDILLA", + L"\x0328" L"OGONEK", + L"\x0307" L"DOT_ABOVE", + L"\x030a" L"RING", + + L"\x0303" L"TILDE", + L"\x0304" L"MAKRON", + L"\x0308" L"DIAERASE", + L"\x030b" L"DOPPEL_AKUT", + L"\x0337" L"SCHRAEGSTRICH", + L"\x0326" L"KOMMA_BELOW", + + + NULL +}; + +static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = { + +// Anfang der Taste links neben der 1 + DEADTRANS( L'1' , L'^' , 0x00b9 , 0x0000), //ZIRKUMFLEX + DEADTRANS( L'2' , L'^' , 0x00b2 , 0x0000), + DEADTRANS( L'3' , L'^' , 0x00b3 , 0x0000), + DEADTRANS( L'A' , L'^' , 0x00c2 , 0x0000), + DEADTRANS( L'E' , L'^' , 0x00ca , 0x0000), + DEADTRANS( L'I' , L'^' , 0x00ce , 0x0000), + DEADTRANS( L'O' , L'^' , 0x00d4 , 0x0000), + DEADTRANS( L'U' , L'^' , 0x00db , 0x0000), + DEADTRANS( L'a' , L'^' , 0x00e2 , 0x0000), + DEADTRANS( L'e' , L'^' , 0x00ea , 0x0000), + DEADTRANS( L'i' , L'^' , 0x00ee , 0x0000), + DEADTRANS( L'o' , L'^' , 0x00f4 , 0x0000), + DEADTRANS( L'u' , L'^' , 0x00fb , 0x0000), + DEADTRANS( L'C' , L'^' , 0x0108 , 0x0000), + DEADTRANS( L'c' , L'^' , 0x0109 , 0x0000), + DEADTRANS( L'G' , L'^' , 0x011c , 0x0000), + DEADTRANS( L'g' , L'^' , 0x011d , 0x0000), + DEADTRANS( L'H' , L'^' , 0x0124 , 0x0000), + DEADTRANS( L'h' , L'^' , 0x0125 , 0x0000), + DEADTRANS( L'J' , L'^' , 0x0134 , 0x0000), + DEADTRANS( L'j' , L'^' , 0x0135 , 0x0000), + DEADTRANS( L'S' , L'^' , 0x015c , 0x0000), + DEADTRANS( L's' , L'^' , 0x015d , 0x0000), + DEADTRANS( L'W' , L'^' , 0x0174 , 0x0000), + DEADTRANS( L'w' , L'^' , 0x0175 , 0x0000), + DEADTRANS( L'Y' , L'^' , 0x0176 , 0x0000), + DEADTRANS( L'y' , L'^' , 0x0177 , 0x0000), + DEADTRANS( L'Z' , L'^' , 0x1e90 , 0x0000), + DEADTRANS( L'z' , L'^' , 0x1e91 , 0x0000), + DEADTRANS( L'1' , L'^' , 0x00b9 , 0x0000), + DEADTRANS( L'2' , L'^' , 0x00b2 , 0x0000), + DEADTRANS( L'3' , L'^' , 0x00b3 , 0x0000), + DEADTRANS( L'4' , L'^' , 0x2074 , 0x0000), + DEADTRANS( L'5' , L'^' , 0x2075 , 0x0000), + DEADTRANS( L'6' , L'^' , 0x2076 , 0x0000), + DEADTRANS( L'7' , L'^' , 0x2077 , 0x0000), + DEADTRANS( L'8' , L'^' , 0x2078 , 0x0000), + DEADTRANS( L'9' , L'^' , 0x2079 , 0x0000), + DEADTRANS( L'0' , L'^' , 0x2070 , 0x0000), + DEADTRANS( L'+' , L'^' , 0x207a , 0x0000), + DEADTRANS( L'-' , L'^' , 0x207b , 0x0000), + DEADTRANS( L'=' , L'^' , 0x207c , 0x0000), + DEADTRANS( L'(' , L'^' , 0x207d , 0x0000), + DEADTRANS( L')' , L'^' , 0x207e , 0x0000), + DEADTRANS( L'n' , L'^' , 0x207f , 0x0000), + DEADTRANS( L' ' , L'^' , L'^' , 0x0000), + + DEADTRANS( L'C' , 0x030c , 0x010c , 0x0000), //CARON + DEADTRANS( L'c' , 0x030c , 0x010d , 0x0000), + DEADTRANS( L'D' , 0x030c , 0x010e , 0x0000), + DEADTRANS( L'd' , 0x030c , 0x010f , 0x0000), + DEADTRANS( L'E' , 0x030c , 0x011a , 0x0000), + DEADTRANS( L'e' , 0x030c , 0x011b , 0x0000), + DEADTRANS( L'L' , 0x030c , 0x013d , 0x0000), + DEADTRANS( L'l' , 0x030c , 0x013e , 0x0000), + DEADTRANS( L'N' , 0x030c , 0x0147 , 0x0000), + DEADTRANS( L'n' , 0x030c , 0x0148 , 0x0000), + DEADTRANS( L'R' , 0x030c , 0x0158 , 0x0000), + DEADTRANS( L'r' , 0x030c , 0x0159 , 0x0000), + DEADTRANS( L'S' , 0x030c , 0x0160 , 0x0000), + DEADTRANS( L's' , 0x030c , 0x0161 , 0x0000), + DEADTRANS( L'T' , 0x030c , 0x0164 , 0x0000), + DEADTRANS( L't' , 0x030c , 0x0165 , 0x0000), + DEADTRANS( L'Z' , 0x030c , 0x017d , 0x0000), + DEADTRANS( L'z' , 0x030c , 0x017e , 0x0000), + DEADTRANS( L'A' , 0x030c , 0x01cd , 0x0000), + DEADTRANS( L'a' , 0x030c , 0x01ce , 0x0000), + DEADTRANS( L'I' , 0x030c , 0x01cf , 0x0000), + DEADTRANS( L'i' , 0x030c , 0x01d0 , 0x0000), + DEADTRANS( L'O' , 0x030c , 0x01d1 , 0x0000), + DEADTRANS( L'o' , 0x030c , 0x01d2 , 0x0000), + DEADTRANS( L'U' , 0x030c , 0x01d3 , 0x0000), + DEADTRANS( L'u' , 0x030c , 0x01d4 , 0x0000), + DEADTRANS( L'G' , 0x030c , 0x01e6 , 0x0000), + DEADTRANS( L'g' , 0x030c , 0x01e7 , 0x0000), + DEADTRANS( L'K' , 0x030c , 0x01e8 , 0x0000), + DEADTRANS( L'k' , 0x030c , 0x01e9 , 0x0000), + DEADTRANS( L'j' , 0x030c , 0x01f0 , 0x0000), + DEADTRANS( L'H' , 0x030c , 0x021e , 0x0000), + DEADTRANS( L'h' , 0x030c , 0x021f , 0x0000), + DEADTRANS( 0x00fc , 0x030c , 0x01da , 0x0000), + DEADTRANS( 0x00dc , 0x030c , 0x01d9 , 0x0000), + DEADTRANS( L' ' , 0x030c , 0x030c , 0x0000), + + DEADTRANS( L'A' , 0x0306 , 0x0102 , 0x0000), //BREVIS + DEADTRANS( L'a' , 0x0306 , 0x0103 , 0x0000), + DEADTRANS( L'E' , 0x0306 , 0x0114 , 0x0000), + DEADTRANS( L'e' , 0x0306 , 0x0115 , 0x0000), + DEADTRANS( L'G' , 0x0306 , 0x011e , 0x0000), + DEADTRANS( L'g' , 0x0306 , 0x011f , 0x0000), + DEADTRANS( L'I' , 0x0306 , 0x012c , 0x0000), + DEADTRANS( L'i' , 0x0306 , 0x012d , 0x0000), + DEADTRANS( L'O' , 0x0306 , 0x014e , 0x0000), + DEADTRANS( L'o' , 0x0306 , 0x014f , 0x0000), + DEADTRANS( L'U' , 0x0306 , 0x016c , 0x0000), + DEADTRANS( L'u' , 0x0306 , 0x016d , 0x0000), + DEADTRANS( L' ' , 0x0306 , 0x0306 , 0x0000), + + DEADTRANS( L'1' , 0x0335 , 0x2081 , 0x0000), //QUERSTRICH + DEADTRANS( L'2' , 0x0335 , 0x2082 , 0x0000), + DEADTRANS( L'3' , 0x0335 , 0x2083 , 0x0000), + DEADTRANS( L'4' , 0x0335 , 0x2084 , 0x0000), + DEADTRANS( L'5' , 0x0335 , 0x2085 , 0x0000), + DEADTRANS( L'6' , 0x0335 , 0x2086 , 0x0000), + DEADTRANS( L'7' , 0x0335 , 0x2087 , 0x0000), + DEADTRANS( L'8' , 0x0335 , 0x2088 , 0x0000), + DEADTRANS( L'9' , 0x0335 , 0x2089 , 0x0000), + DEADTRANS( L'0' , 0x0335 , 0x2080 , 0x0000), + DEADTRANS( L'+' , 0x0335 , 0x208a , 0x0000), + DEADTRANS( L'-' , 0x0335 , 0x208b , 0x0000), + DEADTRANS( L'=' , 0x0335 , 0x208c , 0x0000), + DEADTRANS( L'(' , 0x0335 , 0x208d , 0x0000), + DEADTRANS( L')' , 0x0335 , 0x208e , 0x0000), + DEADTRANS( L'x' , 0x0335 , 0x2093 , 0x0000), + DEADTRANS( L' ' , 0x0335 , 0x0335 , 0x0000), + + DEADTRANS( L' ' , 0x00b7 , 0x00b7 , 0x0000), //DOT_MID + + DEADTRANS( L'B' , 0x0323 , 0x1e04 , 0x0000), //DOT_BELOW + DEADTRANS( L'b' , 0x0323 , 0x1e05 , 0x0000), + DEADTRANS( L'D' , 0x0323 , 0x1e0c , 0x0000), + DEADTRANS( L'd' , 0x0323 , 0x1e0d , 0x0000), + DEADTRANS( L'H' , 0x0323 , 0x1e24 , 0x0000), + DEADTRANS( L'h' , 0x0323 , 0x1e25 , 0x0000), + DEADTRANS( L'K' , 0x0323 , 0x1e32 , 0x0000), + DEADTRANS( L'k' , 0x0323 , 0x1e33 , 0x0000), + DEADTRANS( L'L' , 0x0323 , 0x1e36 , 0x0000), + DEADTRANS( L'l' , 0x0323 , 0x1e37 , 0x0000), + DEADTRANS( L'M' , 0x0323 , 0x1e42 , 0x0000), + DEADTRANS( L'm' , 0x0323 , 0x1e43 , 0x0000), + DEADTRANS( L'N' , 0x0323 , 0x1e46 , 0x0000), + DEADTRANS( L'n' , 0x0323 , 0x1e47 , 0x0000), + DEADTRANS( L'R' , 0x0323 , 0x1e5a , 0x0000), + DEADTRANS( L'r' , 0x0323 , 0x1e5b , 0x0000), + DEADTRANS( L'S' , 0x0323 , 0x1e62 , 0x0000), + DEADTRANS( L's' , 0x0323 , 0x1e63 , 0x0000), + DEADTRANS( L'T' , 0x0323 , 0x1e6c , 0x0000), + DEADTRANS( L't' , 0x0323 , 0x1e6d , 0x0000), + DEADTRANS( L'V' , 0x0323 , 0x1e7e , 0x0000), + DEADTRANS( L'v' , 0x0323 , 0x1e7f , 0x0000), + DEADTRANS( L'W' , 0x0323 , 0x1e88 , 0x0000), + DEADTRANS( L'w' , 0x0323 , 0x1e89 , 0x0000), + DEADTRANS( L'Z' , 0x0323 , 0x1e92 , 0x0000), + DEADTRANS( L'z' , 0x0323 , 0x1e93 , 0x0000), + DEADTRANS( L'A' , 0x0323 , 0x1ea0 , 0x0000), + DEADTRANS( L'a' , 0x0323 , 0x1ea1 , 0x0000), + DEADTRANS( L'E' , 0x0323 , 0x1eb8 , 0x0000), + DEADTRANS( L'e' , 0x0323 , 0x1eb9 , 0x0000), + DEADTRANS( L'I' , 0x0323 , 0x1eca , 0x0000), + DEADTRANS( L'i' , 0x0323 , 0x1ecb , 0x0000), + DEADTRANS( L'O' , 0x0323 , 0x1ecc , 0x0000), + DEADTRANS( L'o' , 0x0323 , 0x1ecd , 0x0000), + DEADTRANS( L'Y' , 0x0323 , 0x1ef4 , 0x0000), + DEADTRANS( L'y' , 0x0323 , 0x1ef5 , 0x0000), + DEADTRANS( L' ' , 0x0323 , 0x0323 , 0x0000), +// Ende der Taste links neben der 1 +// Anfang der Tasten zwei rechts neben der 0 + DEADTRANS( L'a' , 0x0301 , 0x00e1 , 0x0000), //AKUT + DEADTRANS( L'e' , 0x0301 , 0x00e9 , 0x0000), + DEADTRANS( L'i' , 0x0301 , 0x00ed , 0x0000), + DEADTRANS( L'o' , 0x0301 , 0x00f3 , 0x0000), + DEADTRANS( L'u' , 0x0301 , 0x00fa , 0x0000), + DEADTRANS( L'y' , 0x0301 , 0x00fd , 0x0000), + DEADTRANS( L'A' , 0x0301 , 0x00c1 , 0x0000), + DEADTRANS( L'E' , 0x0301 , 0x00c9 , 0x0000), + DEADTRANS( L'I' , 0x0301 , 0x00cd , 0x0000), + DEADTRANS( L'O' , 0x0301 , 0x00d3 , 0x0000), + DEADTRANS( L'U' , 0x0301 , 0x00da , 0x0000), + DEADTRANS( L'Y' , 0x0301 , 0x00dd , 0x0000), + DEADTRANS( L'C' , 0x0301 , 0x0106 , 0x0000), + DEADTRANS( L'c' , 0x0301 , 0x0106 , 0x0000), + DEADTRANS( L'L' , 0x0301 , 0x0139 , 0x0000), + DEADTRANS( L'l' , 0x0301 , 0x013a , 0x0000), + DEADTRANS( L'N' , 0x0301 , 0x0143 , 0x0000), + DEADTRANS( L'n' , 0x0301 , 0x0144 , 0x0000), + DEADTRANS( L'R' , 0x0301 , 0x0154 , 0x0000), + DEADTRANS( L'r' , 0x0301 , 0x0155 , 0x0000), + DEADTRANS( L'S' , 0x0301 , 0x015a , 0x0000), + DEADTRANS( L's' , 0x0301 , 0x015b , 0x0000), + DEADTRANS( L'Z' , 0x0301 , 0x0179 , 0x0000), + DEADTRANS( L'z' , 0x0301 , 0x017a , 0x0000), + DEADTRANS( 0x00fc , 0x0301 , 0x01d8 , 0x0000), + DEADTRANS( 0x00dc , 0x0301 , 0x01d7 , 0x0000), + DEADTRANS( L'G' , 0x0301 , 0x01f4 , 0x0000), + DEADTRANS( L'g' , 0x0301 , 0x01f5 , 0x0000), + DEADTRANS( L'K' , 0x0301 , 0x1e30 , 0x0000), + DEADTRANS( L'k' , 0x0301 , 0x1e31 , 0x0000), + DEADTRANS( L'M' , 0x0301 , 0x1e3e , 0x0000), + DEADTRANS( L'm' , 0x0301 , 0x1e3f , 0x0000), + DEADTRANS( L'P' , 0x0301 , 0x1e54 , 0x0000), + DEADTRANS( L'p' , 0x0301 , 0x1e55 , 0x0000), + DEADTRANS( L'W' , 0x0301 , 0x1e82 , 0x0000), + DEADTRANS( L'w' , 0x0301 , 0x1e83 , 0x0000), + DEADTRANS( L' ' , 0x0301 , 0x0301 , 0x0000), + + DEADTRANS( L'a' , 0x0300 , 0x00e0 , 0x0000), //GRAVIS + DEADTRANS( L'e' , 0x0300 , 0x00e8 , 0x0000), + DEADTRANS( L'i' , 0x0300 , 0x00ec , 0x0000), + DEADTRANS( L'o' , 0x0300 , 0x00f2 , 0x0000), + DEADTRANS( L'u' , 0x0300 , 0x00f9 , 0x0000), + DEADTRANS( L'A' , 0x0300 , 0x00c0 , 0x0000), + DEADTRANS( L'E' , 0x0300 , 0x00c8 , 0x0000), + DEADTRANS( L'I' , 0x0300 , 0x00cc , 0x0000), + DEADTRANS( L'O' , 0x0300 , 0x00d2 , 0x0000), + DEADTRANS( L'U' , 0x0300 , 0x00d9 , 0x0000), + DEADTRANS( 0x00dc , 0x0300 , 0x01db , 0x0000), + DEADTRANS( 0x00fc , 0x0300 , 0x01dc , 0x0000), + DEADTRANS( L'N' , 0x0300 , 0x01f8 , 0x0000), + DEADTRANS( L'n' , 0x0300 , 0x01f9 , 0x0000), + DEADTRANS( L'W' , 0x0300 , 0x1e80 , 0x0000), + DEADTRANS( L'w' , 0x0300 , 0x1e81 , 0x0000), + DEADTRANS( L'Y' , 0x0300 , 0x1ef2 , 0x0000), + DEADTRANS( L'y' , 0x0300 , 0x1ef3 , 0x0000), + DEADTRANS( L' ' , 0x0300 , 0x0300 , 0x0000), + + DEADTRANS( L'C' , 0x0327 , 0x00c7 , 0x0000), //CEDILLA + DEADTRANS( L'c' , 0x0327 , 0x00e7 , 0x0000), + DEADTRANS( L'G' , 0x0327 , 0x0122 , 0x0000), + DEADTRANS( L'g' , 0x0327 , 0x0123 , 0x0000), + DEADTRANS( L'K' , 0x0327 , 0x0136 , 0x0000), + DEADTRANS( L'k' , 0x0327 , 0x0137 , 0x0000), + DEADTRANS( L'L' , 0x0327 , 0x013b , 0x0000), + DEADTRANS( L'l' , 0x0327 , 0x013c , 0x0000), + DEADTRANS( L'N' , 0x0327 , 0x0145 , 0x0000), + DEADTRANS( L'n' , 0x0327 , 0x0146 , 0x0000), + DEADTRANS( L'R' , 0x0327 , 0x0156 , 0x0000), + DEADTRANS( L'r' , 0x0327 , 0x0157 , 0x0000), + DEADTRANS( L'S' , 0x0327 , 0x015e , 0x0000), + DEADTRANS( L's' , 0x0327 , 0x015f , 0x0000), + DEADTRANS( L'T' , 0x0327 , 0x0162 , 0x0000), + DEADTRANS( L't' , 0x0327 , 0x0163 , 0x0000), + DEADTRANS( L'E' , 0x0327 , 0x0228 , 0x0000), + DEADTRANS( L'e' , 0x0327 , 0x0229 , 0x0000), + DEADTRANS( L'D' , 0x0327 , 0x1e10 , 0x0000), + DEADTRANS( L'd' , 0x0327 , 0x1e11 , 0x0000), + DEADTRANS( L'H' , 0x0327 , 0x1e28 , 0x0000), + DEADTRANS( L'h' , 0x0327 , 0x1e29 , 0x0000), + DEADTRANS( L' ' , 0x0327 , 0x0327 , 0x0000), + + DEADTRANS( L'A' , 0x0328 , 0x0104 , 0x0000), //OGONEK + DEADTRANS( L'a' , 0x0328 , 0x0105 , 0x0000), + DEADTRANS( L'E' , 0x0328 , 0x0118 , 0x0000), + DEADTRANS( L'e' , 0x0328 , 0x0119 , 0x0000), + DEADTRANS( L'I' , 0x0328 , 0x012e , 0x0000), + DEADTRANS( L'i' , 0x0328 , 0x012f , 0x0000), + DEADTRANS( L'U' , 0x0328 , 0x0172 , 0x0000), + DEADTRANS( L'u' , 0x0328 , 0x0173 , 0x0000), + DEADTRANS( L'O' , 0x0328 , 0x01ea , 0x0000), + DEADTRANS( L'o' , 0x0328 , 0x01eb , 0x0000), + DEADTRANS( L' ' , 0x0328 , 0x0328 , 0x0000), + + DEADTRANS( L'C' , 0x0307 , 0x010a , 0x0000), //DOT_ABOVE + DEADTRANS( L'c' , 0x0307 , 0x010b , 0x0000), + DEADTRANS( L'E' , 0x0307 , 0x0116 , 0x0000), + DEADTRANS( L'e' , 0x0307 , 0x0117 , 0x0000), + DEADTRANS( L'G' , 0x0307 , 0x0120 , 0x0000), + DEADTRANS( L'g' , 0x0307 , 0x0121 , 0x0000), + DEADTRANS( L'I' , 0x0307 , 0x0130 , 0x0000), + DEADTRANS( L'i' , 0x0307 , 0x0131 , 0x0000), + DEADTRANS( L'Z' , 0x0307 , 0x017b , 0x0000), + DEADTRANS( L'z' , 0x0307 , 0x017c , 0x0000), + DEADTRANS( L'A' , 0x0307 , 0x0226 , 0x0000), + DEADTRANS( L'a' , 0x0307 , 0x0227 , 0x0000), + DEADTRANS( L'O' , 0x0307 , 0x022e , 0x0000), + DEADTRANS( L'o' , 0x0307 , 0x022f , 0x0000), + DEADTRANS( L'B' , 0x0307 , 0x1e02 , 0x0000), + DEADTRANS( L'b' , 0x0307 , 0x1e03 , 0x0000), + DEADTRANS( L'D' , 0x0307 , 0x1e0a , 0x0000), + DEADTRANS( L'd' , 0x0307 , 0x1e0b , 0x0000), + DEADTRANS( L'F' , 0x0307 , 0x1e1e , 0x0000), + DEADTRANS( L'f' , 0x0307 , 0x1e1f , 0x0000), + DEADTRANS( L'H' , 0x0307 , 0x1e22 , 0x0000), + DEADTRANS( L'h' , 0x0307 , 0x1e23 , 0x0000), + DEADTRANS( L'M' , 0x0307 , 0x1e40 , 0x0000), + DEADTRANS( L'm' , 0x0307 , 0x1e41 , 0x0000), + DEADTRANS( L'N' , 0x0307 , 0x1e44 , 0x0000), + DEADTRANS( L'n' , 0x0307 , 0x1e45 , 0x0000), + DEADTRANS( L'P' , 0x0307 , 0x1e56 , 0x0000), + DEADTRANS( L'p' , 0x0307 , 0x1e57 , 0x0000), + DEADTRANS( L'R' , 0x0307 , 0x1e58 , 0x0000), + DEADTRANS( L'r' , 0x0307 , 0x1e59 , 0x0000), + DEADTRANS( L'S' , 0x0307 , 0x1e60 , 0x0000), + DEADTRANS( L's' , 0x0307 , 0x1e61 , 0x0000), + DEADTRANS( L'T' , 0x0307 , 0x1e6a , 0x0000), + DEADTRANS( L't' , 0x0307 , 0x1e6b , 0x0000), + DEADTRANS( L'W' , 0x0307 , 0x1e86 , 0x0000), + DEADTRANS( L'w' , 0x0307 , 0x1e87 , 0x0000), + DEADTRANS( L'X' , 0x0307 , 0x1e8a , 0x0000), + DEADTRANS( L'x' , 0x0307 , 0x1e8b , 0x0000), + DEADTRANS( L'Y' , 0x0307 , 0x1e8e , 0x0000), + DEADTRANS( L'y' , 0x0307 , 0x1e8f , 0x0000), + DEADTRANS( L' ' , 0x0307 , 0x0307 , 0x0000), + + DEADTRANS( L'E' , 0x030a , 0x0116 , 0x0000), //RING + DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000), + DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000), + + + DEADTRANS( L'e' , 0x030a , 0x030a , 0x0000), + + + + + + + + + + +// Ende der Tasten zwei rechts neben der 0 +//Fehlt noch viel :( + 0, 0 +}; + + +static ALLOC_SECTION_LDATA KBDTABLES KbdTables = { + /* + * Modifier keys + */ + &CharModifiers, + + /* + * Characters tables + */ + aVkToWcharTable, + + /* + * Diacritics + */ + aDeadKey, + + /* + * Names of Keys + */ + aKeyNames, + aKeyNamesExt, + aKeyNamesDead, + + /* + * Scan codes to Virtual Keys + */ + ausVK, + sizeof(ausVK) / sizeof(ausVK[0]), + aE0VscToVk, + aE1VscToVk, + + /* + * Locale-specific special processing + */ + MAKELONG(KLLF_ALTGR, KBD_VERSION), + + /* + * Ligatures + */ + 0, + 0, + NULL +}; + +PKBDTABLES KbdLayerDescriptor(VOID) +{ + return &KbdTables; +} diff --git a/kbdneo2/Quelldateien/kbdneo2.def b/kbdneo2/Quelldateien/kbdneo2.def new file mode 100644 index 0000000..6207414 --- /dev/null +++ b/kbdneo2/Quelldateien/kbdneo2.def @@ -0,0 +1,4 @@ +LIBRARY KBDNEO2 + +EXPORTS + KbdLayerDescriptor @1 diff --git a/kbdneo2/Quelldateien/kbdneo2.h b/kbdneo2/Quelldateien/kbdneo2.h new file mode 100644 index 0000000..e4177b1 --- /dev/null +++ b/kbdneo2/Quelldateien/kbdneo2.h @@ -0,0 +1,109 @@ +/****************************** Module Header ******************************\ +* Module Name: KBDNEO2.H +* +* keyboard layout header for NEO German +* +* Various defines for use by keyboard input code. +* +* History: Ver 0.1 +* +\***************************************************************************/ + +/* + * kbd type should be controlled by cl command-line argument + */ +#define KBD_TYPE 4 + +/* +* Include the basis of all keyboard table values +*/ +#include "kbd.h" +#include +/***************************************************************************\ +* The table below defines the virtual keys for various keyboard types where +* the keyboard differ from the US keyboard. +* +* _EQ() : all keyboard types have the same virtual key for this scancode +* _NE() : different virtual keys for this scancode, depending on kbd type +* +* +------+ +----------+----------+----------+----------+----------+----------+ +* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd | +* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 | +\****+-------+_+----------+----------+----------+----------+----------+----------+*/ + +#undef T0D +#define T0D _EQ( OEM_2 ) +#undef T10 +#define T10 _EQ( 'X' ) +#undef T11 +#define T11 _EQ( 'V' ) +#undef T12 +#define T12 _EQ( 'L' ) +#undef T13 +#define T13 _EQ( 'C' ) +#undef T14 +#define T14 _EQ( 'W' ) +#undef T15 +#define T15 _EQ( 'K' ) +#undef T16 +#define T16 _EQ( 'H' ) +#undef T17 +#define T17 _EQ( 'G' ) +#undef T18 +#define T18 _EQ( 'F' ) +#undef T19 +#define T19 _EQ( 'Q' ) +#undef T1A +#define T1A _EQ( OEM_3 ) +#undef T1B +#define T1B _EQ( OEM_4 ) +#undef T1E +#define T1E _EQ( 'U' ) +#undef T1F +#define T1F _EQ( 'I' ) +#undef T20 +#define T20 _EQ( 'A' ) +#undef T21 +#define T21 _EQ( 'E' ) +#undef T22 +#define T22 _EQ( 'O' ) +#undef T23 +#define T23 _EQ( 'S' ) +#undef T24 +#define T24 _EQ( 'N' ) +#undef T25 +#define T25 _EQ( 'R' ) +#undef T26 +#define T26 _EQ( 'T' ) +#undef T27 +#define T27 _EQ( 'D' ) +#undef T28 +#define T28 _EQ( 'Y' ) +#undef T29 +#define T29 _EQ( OEM_1 ) +#undef T2B +#define T2B _EQ( KANA ) // Mod 3 +// #define T2B _EQ( OEM_ROYA ) +#undef T2C +#define T2C _EQ( OEM_5 ) +#undef T2D +#define T2D _EQ( OEM_6 ) +#undef T2E +#define T2E _EQ( OEM_7 ) +#undef T2F +#define T2F _EQ( 'P' ) +#undef T30 +#define T30 _EQ( 'Z' ) +#undef T31 +#define T31 _EQ( 'B' ) +#undef T35 +#define T35 _EQ( 'J' ) +#undef T3A +#define T3A _EQ( KANA )// Mod 3 +// #define T3A _EQ( OEM_ROYA ) +#undef X38 +#define X38 _EQ( RMENU )// Mod 5 +// #define X38 _EQ( OEM_102 ) +#undef T56 +#define T56 _EQ( RMENU )// Mod 5 +// #define T56 _EQ( OEM_102 ) \ No newline at end of file diff --git a/kbdneo2/Quelldateien/kbdneo2.rc b/kbdneo2/Quelldateien/kbdneo2.rc new file mode 100644 index 0000000..ec83d64 --- /dev/null +++ b/kbdneo2/Quelldateien/kbdneo2.rc @@ -0,0 +1,11 @@ +#include +#include + +#define VER_FILETYPE VFT_DLL +#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD +#define VER_FILEDESCRIPTION_STR "NEO2 German ergonomic Keyboard Layout" +#define VER_INTERNALNAME_STR "kbdneo2" +#define VER_ORIGINALFILENAME_STR "kbdneo2.dll" + +#define VER_LANGNEUTRAL +#include "common.ver" diff --git a/kbdneo2/Quelldateien/makefile b/kbdneo2/Quelldateien/makefile new file mode 100644 index 0000000..23d6985 --- /dev/null +++ b/kbdneo2/Quelldateien/makefile @@ -0,0 +1,15 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the components of NT OS/2 +# +!IF DEFINED(_NT_TARGET_VERSION) +! IF $(_NT_TARGET_VERSION)>=0x501 +! INCLUDE $(NTMAKEENV)\makefile.def +! ELSE +! message BUILDMSG: Warning : The sample "$(MAKEDIR)" is not valid for the current OS target. +! ENDIF +!ELSE +! INCLUDE $(NTMAKEENV)\makefile.def +!ENDIF + diff --git a/kbdneo2/Quelldateien/makefile.inc b/kbdneo2/Quelldateien/makefile.inc new file mode 100644 index 0000000..fdf82aa --- /dev/null +++ b/kbdneo2/Quelldateien/makefile.inc @@ -0,0 +1 @@ +!INCLUDE ..\..\makefile.inc diff --git a/kbdneo2/Quelldateien/sources b/kbdneo2/Quelldateien/sources new file mode 100644 index 0000000..a4d98f3 --- /dev/null +++ b/kbdneo2/Quelldateien/sources @@ -0,0 +1,2 @@ +TARGETNAME=kbdneo2 +!INCLUDE ..\..\sources.inc diff --git a/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll new file mode 100644 index 0000000..0f69144 Binary files /dev/null and b/kbdneo2/Treiber/32bit_Windows_Server_2003/NEO20.dll differ diff --git a/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll new file mode 100644 index 0000000..ad26439 Binary files /dev/null and b/kbdneo2/Treiber/32bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll differ diff --git a/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll b/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll new file mode 100644 index 0000000..f207250 Binary files /dev/null and b/kbdneo2/Treiber/32bit_Windows_XP/NEO20.dll differ diff --git a/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll b/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll new file mode 100644 index 0000000..8fdcd18 Binary files /dev/null and b/kbdneo2/Treiber/64bit_Windows_Server_2003_und Windows_XP/NEO20.dll differ diff --git a/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll b/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll new file mode 100644 index 0000000..24c8ce4 Binary files /dev/null and b/kbdneo2/Treiber/64bit_Windows_Vista_und_Windows_Server_Longhorn/NEO20.dll differ diff --git a/kbdneo2/Treiber/README.txt b/kbdneo2/Treiber/README.txt new file mode 100644 index 0000000..622623e --- /dev/null +++ b/kbdneo2/Treiber/README.txt @@ -0,0 +1,24 @@ +==Windows-Treiber== +Leider gibt es bislang noch keine eigene Installationsroutine. Zur Installation +muss deshalb zur Zeit noch die MSKLC-Variante installiert werden, anschließend +muss die NEO20.dll-Datei im Ordner \WINDOWS\system32 mit der hier vorhandenen +Datei überschrieben werden. + +1.) MSKLC-Variante installieren +2.) NEO20.dll nach \WINDOWS\system32 kopieren und die dort vorhandene Version + überschreiben + +Es ist keine Registry-Änderung mehr nötig! + + + +==Einschränkungen des Windows-Treibers== +1.) Einige Steuertasten lassen sich (noch?) nicht belegen und stehen deshalb +nicht zur Verfügung. +Dazu gehören leider auch die Pfeiltasten, Entf, Seite +hoch/runter, Einfg, Pos1 und Ende. +2.) Ein Einrasten von Modifiern ist leider nicht möglich. +3.) Bei vielen Programmen wird die Kombination Alt+Strg+… für Shortcuts verwendet +und kann so in Konflikt mit den höheren Ebenen (Ebene 4 und 6) kommen. +4.) Die Belegung des Ziffernblocks ist noch unvollständig. +5.) Es gibt keine Kombo-/Komponier-/Compose-/Multi-Key-Taste. \ No newline at end of file diff --git a/msklc/NEO20_amd64.msi b/msklc/NEO20_amd64.msi new file mode 100644 index 0000000..ef7bf58 Binary files /dev/null and b/msklc/NEO20_amd64.msi differ diff --git a/msklc/NEO20_i386.msi b/msklc/NEO20_i386.msi new file mode 100644 index 0000000..2a6916e Binary files /dev/null and b/msklc/NEO20_i386.msi differ diff --git a/msklc/NEO20_ia64.msi b/msklc/NEO20_ia64.msi new file mode 100644 index 0000000..5c5911d Binary files /dev/null and b/msklc/NEO20_ia64.msi differ diff --git a/msklc/amd64/NEO20.dll b/msklc/amd64/NEO20.dll new file mode 100644 index 0000000..0bf4509 Binary files /dev/null and b/msklc/amd64/NEO20.dll differ diff --git a/msklc/i386/NEO20.dll b/msklc/i386/NEO20.dll new file mode 100644 index 0000000..83bd5dd Binary files /dev/null and b/msklc/i386/NEO20.dll differ diff --git a/msklc/ia64/NEO20.dll b/msklc/ia64/NEO20.dll new file mode 100644 index 0000000..c757ccf Binary files /dev/null and b/msklc/ia64/NEO20.dll differ diff --git a/msklc/setup.exe b/msklc/setup.exe new file mode 100644 index 0000000..605579e Binary files /dev/null and b/msklc/setup.exe differ diff --git a/msklc/wow64/NEO20.dll b/msklc/wow64/NEO20.dll new file mode 100644 index 0000000..0f23157 Binary files /dev/null and b/msklc/wow64/NEO20.dll differ diff --git a/neo_portable.zip b/neo_portable.zip new file mode 100644 index 0000000..ccf3666 Binary files /dev/null and b/neo_portable.zip differ -- cgit v1.2.3