neo-layout/windows/ahk-auslaufend/neo20.ahk

5310 lines
208 KiB
AutoHotkey
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*******************************************
WICHTIGE WARNUNG:
Dies ist inzwischen eine automatisch generierte
Datei! Sie wird regelmäßig überschrieben und
sollte deshalb nicht mehr direkt bearbeitet werden!
Alle weiterführenden Informationen finden sich im Abschnitt
== Hinweise für Entwickler ==
in der Datei README.txt!
Versionshinweise (SVN Keywords) für diese Datei:
$LastChangedRevision$
$LastChangedDate$
$LastChangedBy$
$HeadURL$
*******************************************
*******************************************
Das war die letzte WARNUNG, ich hoffe nur, dass
Sie wirklich wissen, was Sie hier tun wollen ...
*******************************************
*/
/******************
* Initialisierung *
*******************
*/
DeadKey := ""
CompKey := ""
PriorDeadKey := ""
PriorCompKey := ""
Ebene12 = 0
noCaps = 0
isFurtherCompkey = 0
EbeneAktualisieren()
SetBatchLines -1
SetCapsLockState Off
KeyboardLED(4, "off")
SetNumLockState Off
SetScrollLockState Off
name=Neo 2.0 (%A_ScriptName%) ($Revision$)
enable=Aktiviere %name%
disable=Deaktiviere %name%
#usehook on
#singleinstance force
#LTrim ; Quelltext kann eingerückt werden
Process,Priority,,High
SendMode Input
/****************
* Verzeichnisse *
*****************
*/
; Setzt den Pfad zu einem temporären Verzeichnis
EnvGet,WindowsEnvTempFolder,TEMP
ResourceFolder = %WindowsEnvTempFolder%\NEO2
FileCreateDir,%ResourceFolder%
; Setzt den Pfad zu den NEO-Anwendungsdateien
EnvGet,WindowsEnvAppDataFolder,APPDATA
ApplicationFolder = %WindowsEnvAppDataFolder%\NEO2
FileCreateDir,%ApplicationFolder%
ini = %ApplicationFolder%\NEO2.ini
/*******************
* Globale Schalter *
********************
*/
; Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0:
; Sollen die Bilder für die Bildschirmtastatur in die compilierte EXE-Datei miteingebunden werden?
; (Nachteil: grössere Dateigrösse, Vorteil: Referenz für Anfänger stets einfach verfügbar)
bildschirmTastaturEinbinden := 1
; Syntaxhinweis: IniRead, Variable, InputFilename, Section, Key [, DefaultValue]
; Soll der Treiber im Einhandmodus betrieben werden?
IniRead,einHandNeo,%ini%,Global,einHandNeo,0
; Soll der Lernmodus aktiviert werden?
IniRead,lernModus,%ini%,Global,lernModus,0
; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden?
IniRead,zeigeLockBox,%ini%,Global,zeigeLockBox,1
; Soll aktivierter Mod4-Lock über die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)?
IniRead,UseMod4Light,%ini%,Global,UseMod4Light,1
; Soll Lang-s auf s, s auf ß und ß auf Lang-s gelegt (bzw. vertauscht) werden?
IniRead,LangSTastatur,%ini%,Global,LangSTastatur,0
If LangSTastatur
KeyboardLED(2,"on")
; Sollen tote Tasten blind angezeigt werden?
IniRead,DeadSilence,%ini%,Global,DeadSilence,1
;Sollen Compose-Tasten blind angezeigt werden?
IniRead,DeadCompose,%ini%,Global,DeadCompose,1
;Soll der Mod2Lock auch auf die Akzente, die Ziffernreihe und das Numpad angewandt werden?
IniRead,striktesMod2Lock,%ini%,Global,striktesMod2Lock,0
/***********************
* Recourcen-Verwaltung *
************************
*/
if (FileExist("ResourceFolder") <> false) {
; Versuche, alle möglicherweise in die EXE eingebundenen Dateien zu extrahieren
FileInstall,neo.ico,%ResourceFolder%\neo.ico,1
FileInstall,neo_disabled.ico,%ResourceFolder%\neo_disabled.ico,1
iconBenutzen=1
if (bildschirmTastaturEinbinden = 1) {
FileInstall,ebene1.png,%ResourceFolder%\ebene1.png,1
FileInstall,ebene2.png,%ResourceFolder%\ebene2.png,1
FileInstall,ebene3.png,%ResourceFolder%\ebene3.png,1
FileInstall,ebene4.png,%ResourceFolder%\ebene4.png,1
FileInstall,ebene5.png,%ResourceFolder%\ebene5.png,1
FileInstall,ebene6.png,%ResourceFolder%\ebene6.png,1
zeigeBildschirmTastatur = 1
}
}
; Benutze die Dateien auch dann, wenn sie eventuell im aktuellen Verzeichnis vorhanden sind
if (FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
zeigeBildschirmTastatur = 1
if (FileExist("neo.ico")&&FileExist("neo_disabled.ico"))
iconBenutzen=1
/*******************************************
* Ü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% and 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 *
**************************
*/
if (iconBenutzen)
menu,tray,icon,%ResourceFolder%\neo.ico,,1
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,add
menu,tray,add,Bearbeiten,edit
menu,tray,add,Neu Laden,reload
menu,tray,add
menu,tray,add,Nicht im Systray anzeigen,hide
menu,tray,add,%name% beenden,exitprogram
menu,tray,default,%disable%
menu,tray,tip,%name%
/**************************
* lernModus Konfiguration *
* nur relevant wenn *
* lernModus = 1 *
* Strg+Komma schaltet um *
***************************
*/
; 0 = aus, 1 = an
; die Nachfolgenden sind nützlich um sich die Qwertz-Tasten abzugewöhnen, da alle auf der 4. Ebene vorhanden.
lernModus_std_Return = 0
lernModus_std_Backspace = 0
lernModus_std_PgUp = 0
lernModus_std_PgDn = 0
lernModus_std_Einf = 0
lernModus_std_Entf = 0
lernModus_std_Pos0 = 0
lernModus_std_Ende = 0
lernModus_std_Hoch = 0
lernModus_std_Runter = 0
lernModus_std_Links = 0
lernModus_std_Rechts = 0
lernModus_std_ZahlenReihe = 0
; im folgenden kann man auch noch ein paar Tasten der 4. Ebene deaktivieren
; nützlich um sich zu zwingen, richtig zu schreiben
lernModus_neo_Backspace = 0
lernModus_neo_Entf = 1
/****************************
* EinHandNeo *
* Umschalten mit Strg+Punkt *
*****************************
*/
spacepressed := 0
keypressed := 0
; Reihe 1
gespiegelt_7 = neo_6
gespiegelt_8 = neo_5
gespiegelt_9 = neo_4
gespiegelt_0 = neo_3
gespiegelt_strich = neo_2
gespiegelt_tot2 = neo_1
; Reihe 2
gespiegelt_k = neo_w
gespiegelt_h = neo_c
gespiegelt_g = neo_l
gespiegelt_f = neo_v
gespiegelt_q = neo_x
gespiegelt_sz = neo_tab
gespiegelt_tot3 = neo_tot1
; Reihe 3
gespiegelt_s = neo_o
gespiegelt_n = neo_e
gespiegelt_r = neo_a
gespiegelt_t = neo_i
gespiegelt_d = neo_u
; Reihe 4
gespiegelt_b = neo_z
gespiegelt_m = neo_p
gespiegelt_komma = neo_ä
gespiegelt_punkt = neo_ö
gespiegelt_j = neo_ü
/**********************
* Tastenkombinationen *
***********************
*/
;Blinde/Sichtbare Tote Tasten
*F9::
if isMod4pressed()
DeadSilence := !DeadSilence
else send {blind}{F9}
return
;Blinde/Sichtbare Compose
*F10::
if isMod4pressed()
DeadCompose := !DeadCompose
else send {blind}{F10}
return
;Lang-s-Tastatur:
*F11::
if isMod4pressed() {
LangSTastatur := !LangSTastatur
if LangSTastatur
KeyboardLED(2,"on")
else KeyboardLED(2,"off")
} else send {blind}{F11}
return
;Alle Modi und Locks in den Normalzustand versetzen, bzw. Skript neu laden:
*Esc::
if isMod4pressed()
reload
else send {blind}{Esc}
return
*pause::
Suspend, Permit
if isShiftpressed()
goto togglesuspend
else send {blind}{pause}
return
^,::lernModus := !lernModus
^.::einHandNeo := !einHandNeo
/*****************
* Menüfunktionen *
******************
*/
togglesuspend:
if A_IsSuspended {
menu,tray,rename,%enable%,%disable%
menu,tray,tip,%name%
if (iconBenutzen)
menu,tray,icon,%ResourceFolder%\neo.ico,,1
suspend,off ; Schaltet Suspend aus -> NEO
} else {
menu,tray,rename,%disable%, %enable%
menu,tray,tip,%name% : Deaktiviert
if (iconBenutzen)
menu,tray,icon, %ResourceFolder%\neo_disabled.ico,,1
suspend,on ; Schaltet Suspend ein -> QWERTZ
} 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
; LShift+RShift == CapsLock (simuliert)
; Es werden nur die beiden Tastenkombinationen abgefragt,
; daher kommen LShift und RShift ungehindert bis in die
; Applikation. Dies ist aber merkwürdig, da beide Shift-
; Tasten nun /modifier keys/ werden und, wie in der AHK-
; Hilfe beschrieben, eigentlich nicht mehr bis zur App
; durchkommen sollten.
; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber
; das schaltet, oh Wunder, die LED nicht wieder aus.
isMod2Locked = 0
VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift
VKA0SC02A & VKA1SC136:: ; LShift, dann RShift
if GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P") {
if isMod2Locked {
isMod2Locked = 0
KeyboardLED(4, "off")
} else {
isMod2Locked = 1
KeyBoardLED(4, "on")
}
}
return
;Mod3-Tasten (Wichtig, sie werden sonst nicht verarbeitet!)
;Auf Mod3+Mod3 liegt zusätzlich zu Mod3+Tab Compose
*VKBFSC02B:: ; #
*VK14SC03A:: ; CapsLock
if GetKeyState("VKBFSC02B", "P") and GetKeyState("VK14SC03A", "P") {
DeadKey := "comp"
CompKey := ""
}
return
;Mod4+Mod4 == Mod4-Lock
; Im Gegensatz zu LShift+RShift werden die beiden Tasten
; _nicht_ zur Applikation weitergeleitet, und nur bei
; gleichzeitigem Drücken wird der Mod4-Lock aktiviert und
; angezeigt.
IsMod4Locked := 0
*VKA5SC138::
*VKE2SC056::
if GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P") {
if IsMod4Locked {
if zeigeLockBox
MsgBox Mod4-Feststellung aufgebehoben!
IsMod4Locked = 0
if UseMod4Light
KeyboardLED(1, "off")
} else {
if zeigeLockBox
MsgBox Mod4 festgestellt: Um Mod4 wieder zu lösen, drücke beide Mod4-Tasten gleichzeitig!
IsMod4Locked = 1
if UseMod4Light
KeyboardLED(1, "on")
}
}
return
EbeneAktualisieren() {
global
PriorDeadKey := DeadKey
PriorCompKey := CompKey
DeadKey := ""
CompKey := ""
Modstate := IsMod4Pressed() . IsMod3Pressed() . IsShiftPressed()
Ebene7 := 0
Ebene8 := 0
if (Modstate = "000") ; Ebene 1: Ohne Mod
Ebene = 1
else if (Modstate = "001") ; Ebene 2: Shift
Ebene = 2
else if (Modstate = "010") ; Ebene 3: Mod3
Ebene = 3
else if (Modstate = "100") ; Ebene 4: Mod4
Ebene = 4
else if (Modstate = "011") ; Ebene 5: Shift+Mod3
Ebene = 5
else if (Modstate = "110") ; Ebene 6: Mod3+Mod4
Ebene = 6
else if (Modstate = "101") { ; Ebene 7: Shift+Mod4 impliziert Ebene 4
Ebene = 4
Ebene7 = 1
} else if (Modstate = "111") { ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6
Ebene = 6
Ebene8 = 1
} Ebene12 := ((Ebene = 1) or (Ebene = 2))
NumLock := GetKeyState("NumLock", "T")
noCaps := 0
}
IsShiftPressed()
{
global
if !(NoCaps and GetKeyState("Shift", "P") and (GetKeyState("Alt", "P") or GetKeyState("Strg", "P"))) {
if striktesMod2Lock
noCaps = 0
if GetKeyState("Shift","P")
if isMod2Locked and !noCaps
return 0
else return 1
else if isMod2Locked and !noCaps
return 1
else return 0
}
}
IsMod3Pressed()
{
global
return (GetKeyState("VKBFSC02B","P") or GetKeyState("VK14SC03A","P"))
}
IsMod4Pressed()
{
global
if !(einHandNeo) or !(spacepressed)
if IsMod4Locked
return !(GetKeyState("<","P") or GetKeyState("SC138","P"))
else
return (GetKeyState("<","P") or GetKeyState("SC138","P"))
else
if IsMod4Locked
return !(GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("ä","P"))
else
return (GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("ä","P"))
}
/*
------------------------------------------------------
QWERTZ->Neo umwandlung
------------------------------------------------------
*/
; Reihe 1
*VKDCSC029::goto neo_tot1 ; Zirkumflex
*VK31SC002::goto neo_1
*VK32SC003::goto neo_2
*VK33SC004::goto neo_3
*VK34SC005::goto neo_4
*VK35SC006::goto neo_5
*VK36SC007::goto neo_6
*VK37SC008::
if !einHandNeo or !spacepressed
goto neo_7
else {
keypressed := 1
goto %gespiegelt_7%
}
*VK38SC009::
if !einHandNeo or !spacepressed
goto neo_8
else {
keypressed := 1
goto %gespiegelt_8%
}
*VK39SC00A::
if !einHandNeo or !spacepressed
goto neo_9
else {
keypressed := 1
goto %gespiegelt_9%
}
*VK30SC00B::
if !einHandNeo or !spacepressed
goto neo_0
else {
keypressed := 1
goto %gespiegelt_0%
}
*VKDBSC00C:: ; ß
if !einHandNeo or !spacepressed
goto neo_strich
else {
keypressed := 1
goto %gespiegelt_strich%
}
*VKDDSC00D::goto neo_tot2 ; Akut
; Reihe 2
VK09SC00F::goto neo_tab
*VK51SC010:: ; q (x)
goto neo_x
*VK57SC011:: ; w (v)
goto neo_v
*VK45SC012:: ; e (l)
goto neo_l
*VK52SC013:: ; r (c)
goto neo_c
*VK54SC014:: ; t (w)
goto neo_w
*VK5ASC015:: ; z (k)
if !einHandNeo or !spacepressed
goto neo_k
else {
keypressed := 1
goto %gespiegelt_k%
}
*VK55SC016:: ; u (h)
if !einHandNeo or !spacepressed
goto neo_h
else {
keypressed := 1
goto %gespiegelt_h%
}
*VK49SC017:: ; i (g)
if !einHandNeo or !spacepressed
goto neo_g
else {
keypressed := 1
goto %gespiegelt_g%
}
*VK4FSC018:: ; o (f)
if !einHandNeo or !spacepressed
goto neo_f
else {
keypressed := 1
goto %gespiegelt_f%
}
*VK50SC019:: ; p (q)
if !einHandNeo or !spacepressed
goto neo_q
else {
keypressed := 1
goto %gespiegelt_q%
}
*VKBASC01A:: ; ü (ß)
if !einHandNeo or !spacepressed
goto neo_sz
else {
keypressed := 1
goto %gespiegelt_sz%
}
*VKBBSC01B:: ; + (tot3)
if !einHandNeo or !spacepressed
goto neo_tot3
else {
keypressed := 1
goto %gespiegelt_tot3%
}
; Reihe 3
*VK41SC01E:: ; a (u)
goto neo_u
*VK53SC01F:: ; s (i)
goto neo_i
*VK44SC020:: ; d (a)
goto neo_a
*VK46SC021:: ; f (e)
goto neo_e
*VK47SC022:: ; g (o)
goto neo_o
*VK48SC023:: ; h (s)
if !einHandNeo or !spacepressed
goto neo_s
else {
keypressed := 1
goto %gespiegelt_s%
}
*VK4ASC024:: ; j (n)
if !einHandNeo or !spacepressed
goto neo_n
else {
keypressed := 1
goto %gespiegelt_n%
}
*VK4BSC025:: ; k (r)
if !einHandNeo or !spacepressed
goto neo_r
else {
keypressed := 1
goto %gespiegelt_r%
}
*VK4CSC026:: ; l (t)
if !einHandNeo or !spacepressed
goto neo_t
else {
keypressed := 1
goto %gespiegelt_t%
}
*VKC0SC027:: ; ö (d)
if !einHandNeo or !spacepressed
goto neo_d
else {
keypressed := 1
goto %gespiegelt_d%
}
*VKDESC028:: ; ä (y)
goto neo_y
; Reihe 4
*VK59SC02C:: ; y (ü)
goto neo_ü
*VK58SC02D:: ; x (ö)
goto neo_ö
*VK43SC02E:: ; c (ä)
goto neo_ä
*VK56SC02F:: ; v (p)
goto neo_p
*VK42SC030:: ; b (z)
goto neo_z
*VK4ESC031:: ; n (b)
if !einHandNeo or !spacepressed
goto neo_b
else {
keypressed := 1
goto %gespiegelt_b%
}
*VK4DSC032:: ; m (m)
if !einHandNeo or !spacepressed
goto neo_m
else {
keypressed := 1
goto %gespiegelt_m%
}
*VKBCSC033:: ; , (,)
if !einHandNeo or !spacepressed
goto neo_komma
else {
keypressed := 1
goto %gespiegelt_komma%
}
*VKBESC034:: ; . (.)
if !einHandNeo or !spacepressed
goto neo_punkt
else {
keypressed := 1
goto %gespiegelt_punkt%
}
*VKBDSC035:: ; - (j)
if !einHandNeo or !spacepressed
goto neo_j
else {
keypressed := 1
goto %gespiegelt_j%
}
; Numpad
*VK90SC145::goto neo_NumLock
*VK6FSC135::goto neo_NumpadDiv
*VK6ASC037::goto neo_NumpadMult
*VK6DSC04A::goto neo_NumpadSub
*VK6BSC04E::goto neo_NumpadAdd
*VK0DSC11C::goto neo_NumpadEnter
*VK67SC047:: ; NumPad7
*VK24SC047::goto neo_Numpad7 ; NumPadHome
*VK68SC048:: ; NumPad8
*VK26SC048::goto neo_Numpad8 ; NumPadUp
*VK69SC049:: ; NumPad9
*VK21SC049::goto neo_Numpad9 ; NumPadPgUp
*VK64SC04B:: ; NumPad4
*VK25SC04B::goto neo_Numpad4 ; NumPadLeft
*VK65SC04C:: ; NumPad5
*VK0CSC04C::goto neo_Numpad5 ; NumPadClear
*VK66SC04D:: ; NumPad6
*VK27SC04D::goto neo_Numpad6 ; NumPadRight
*VK61SC04F:: ; NumPad1
*VK23SC04F::goto neo_Numpad1 ; NumPadEnd
*VK62SC050:: ; NumPad2
*VK28SC050::goto neo_Numpad2 ; NumPadDown
*VK63SC051:: ; NumPad3
*VK22SC051::goto neo_Numpad3 ; NumPadPgDn
*VK60SC052:: ; NumPad0
*VK2DSC052::goto neo_Numpad0 ; NumPadIns
*VK6ESC053:: ; NumPadDot
*VK2ESC053::goto neo_NumpadDot ; NumPadIns
neo_a:
EbeneAktualisieren()
if (((Ebene = 2) and !(CheckDeadUni("a5g1",0x1F02)
or CheckDeadUni("g5g1",0x1F03)))
or (Ebene12 and !(CheckDeadUni12("c1",0x00E2,0x00C2)
or CheckDeadUni12("c2",0x00E3,0x00C3)
or CheckDeadAsc12("c3","å","Å")
or CheckDeadUni12("c4",0x01CE,0x01CD)
or CheckDeadUni12("c5",0x0103,0x0102)
or CheckDeadUni12("c6",0x0101,0x0100)
or CheckDeadUni12("g1",0x00E0,0x00C0)
or CheckDeadAsc12("g3","ä","Ä")
or CheckDeadUni12("g4",0x0201,0x0200)
or CheckDeadUni12("a1",0x00E1,0x00C1)
or CheckDeadUni12("a2",0x0105,0x0104)
or CheckDeadUni12("a3",0x2C65,0x023A)
or CheckDeadUni12("a6",0x0227,0x0226))))
OutputChar12("a","A","a","A")
else if (Ebene = 3)
OutputChar("{{}", "braceleft")
else if (Ebene = 4)
OutputChar("{Down}", "Down")
else if (Ebene = 5 and !(CheckDeadUni("c1",0x1FB6)
or CheckDeadUni("c5",0x1FB0)
or CheckDeadUni("c6",0x1FB1)
or CheckDeadUni("g1",0x1F70)
or CheckDeadUni("g5",0x1F01)
or CheckDeadUni("a1",0x03AC)
or CheckDeadUni("a2",0x1FB3)
or CheckDeadUni("a5",0x1F00)))
SendUnicodeChar(0x03B1, "Greek_alpha") ; alpha
else if (Ebene = 6)
SendUnicodeChar(0x2200, "U2200") ; für alle
return
neo_b:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c6",0x1E07,0x1E06)
or CheckDeadUni12("a6",0x1E03,0x1E02)))
OutputChar12("b","B","b","B")
else if (Ebene = 3)
if isMod2Locked
OutputChar("{Shift Up}{+}{Shift down}", "plus")
else OutputChar("{blind}{+}", "plus")
else if (Ebene = 4)
OutputChar(":", "colon")
else if (Ebene = 5)
SendUnicodeChar(0x03B2, "Greek_beta") ; beta
else if (Ebene = 6)
SendUnicodeChar(0x21D0, "U21D0") ; Doppelpfeil links
return
neo_c:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x0109,0x0108)
or CheckDeadUni12("c4",0x010D,0x010C)
or CheckDeadUni12("a1",0x0107,0x0106)
or CheckDeadUni12("a2",0x00E7,0x00E6)
or CheckDeadUni12("a6",0x010B,0x010A)))
OutputChar12("c","C","c","C")
else if (Ebene = 3)
OutputChar("]", "bracketright")
else if (Ebene = 4) and (!lernModus or lernModus_neo_Entf)
OutputChar("{Del}", "Delete")
else if (Ebene = 5)
SendUnicodeChar(0x03C7, "Greek_chi") ; chi
else if (Ebene = 6)
SendUnicodeChar(0x2102, "U2102") ; C (Komplexe Zahlen)]
return
neo_d:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x1E13,0x1E12)
or CheckDeadUni( "c2",0x1D6D)
or CheckDeadUni12("c4",0x010F,0x010E)
or CheckDeadUni12("g3",0x1E0D,0x1E0C)
or CheckDeadUni12("a1",0x00F0,0x00D0)
or CheckDeadUni12("a2",0x1E11,0x1E10)
or CheckDeadUni12("a3",0x0111,0x0110)
or CheckDeadUni12("a6",0x1E0B,0x1E0A)))
OutputChar12("d","D","d","D")
else if (Ebene = 3)
OutputChar(":", "colon")
else if (Ebene = 4)
OutputChar("{NumpadDot}", "comma")
else if (Ebene = 5)
SendUnicodeChar(0x03B4, "Greek_delta") ; delta
else if (Ebene = 6)
SendUnicodeChar(0x0394, "Greek_DELTA") ; Delta
return
neo_e:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x00EA,0x00CA)
or CheckDeadUni12("c2",0x1EBD,0x1EBC)
or CheckDeadUni12("c4",0x011B,0x011A)
or CheckDeadUni12("c5",0x0115,0x0114)
or CheckDeadUni12("c6",0x0113,0x0112)
or CheckDeadUni12("g1",0x00E8,0x00C8)
or CheckDeadAsc12("g3","ë","Ë")
or CheckDeadUni12("g4",0x0205,0x0204)
or CheckDeadUni12("a1",0x00E9,0x00C9)
or CheckDeadUni12("a2",0x0119,0x0118)
or CheckDeadUni12("a6",0x0117,0x0116)))
OutputChar12("e","E","e","E")
else if (Ebene = 3)
OutputChar("{}}", "braceright")
else if (Ebene = 4)
OutputChar("{Right}", "Right")
else if (Ebene = 5)
SendUnicodeChar(0x03B5, "Greek_epsilon") ; epsilon
else if (Ebene = 6)
SendUnicodeChar(0x2203, "U2203") ; es existiert
return
neo_f:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a6",0x1E1F,0x1E1E)))
OutputChar12("f","F","f","F")
else if ((Ebene = 3) and !(CheckDeadUni("c1",0x2259) ; entspricht
or CheckDeadUni("c2",0x2245) ; ungefähr gleich
or CheckDeadUni("c3",0x2257) ; ring equal to
or CheckDeadUni("c4",0x225A) ; EQUIANGULAR TO
or CheckDeadUni("c6",0x2261) ; identisch
or CheckDeadUni("a3",0x2260))) ; ungleich
OutputChar("`=", "equal")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2079)
or CheckDeadUni("a3",0x2089)))
OutputChar("{Numpad9}", "KP_9")
else if (Ebene = 5)
SendUnicodeChar(0x03C6, "Greek_phi") ; phi
else if (Ebene = 6)
SendUnicodeChar(0x03A6, "Greek_PHI") ; Phi
return
neo_g:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x011D,0x011C)
or CheckDeadUni12("c5",0x011F,0x011E)
or CheckDeadUni12("a2",0x0123,0x0122)
or CheckDeadUni12("a6",0x0121,0x0120)))
OutputChar12("g","G","g","G")
else if ((Ebene = 3) and !(CheckDeadUni("a3",0x2265))) ; größer gleich
OutputChar(">", "greater")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078)
or CheckDeadUni("a3",0x2088)))
OutputChar("{Numpad8}", "KP_8")
else if (Ebene = 5)
SendUnicodeChar(0x03B3, "Greek_gamma") ; gamma
else if (Ebene = 6)
SendUnicodeChar(0x0393, "Greek_GAMMA") ; Gamma
return
neo_h:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x0125,0x0124)
or CheckDeadUni12("a3",0x0127,0x0126)
or CheckDeadUni12("a6",0x1E23,0x1E22)))
OutputChar12("h","H","h","H")
else if ((Ebene = 3) and !(CheckDeadUni("a3",0x2264))) ; kleiner gleich
OutputChar("<", "less")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2077)
or CheckDeadUni("a3",0x2087)))
OutputChar("{Numpad7}", "KP_7")
else if (Ebene = 5)
SendUnicodeChar(0x03C8, "Greek_psi") ; psi
else if (Ebene = 6)
SendUnicodeChar(0x03A8, "Greek_PSI") ; Psi
return
neo_i:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x00EE,0x00CE)
or CheckDeadUni12("c2",0x0129,0x0128)
or CheckDeadUni12("c4",0x01D0,0x01CF)
or CheckDeadUni12("c5",0x012D,0x012C)
or CheckDeadUni12("c6",0x012B,0x012A)
or CheckDeadUni12("g1",0x00EC,0x00CC)
or CheckDeadAsc12("g3","ï","Ï")
or CheckDeadUni12("g4",0x0209,0x0208)
or CheckDeadUni12("a1",0x00ED,0x00CD)
or CheckDeadUni12("a2",0x012F,0x012E)
or CheckDeadUni12("a3",0x0268,0x0197)
or CheckDeadUni12("a6",0x0131,0x0130)))
OutputChar12("i","I","i","I")
else if (Ebene = 3)
OutputChar("`/", "slash")
else if (Ebene = 4)
OutputChar("{Left}", "Left")
else if (Ebene = 5)
SendUnicodeChar(0x03B9, "Greek_iota") ; iota
else if (Ebene = 6)
SendUnicodeChar(0x222B, "integral") ; integral
return
neo_j:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134)
or CheckDeadUni( "c4",0x01F0)
or CheckDeadUni12("a3",0x0249,0x0248)))
OutputChar12("j","J","j","J")
else if (Ebene = 3)
OutputChar("`;", "semicolon")
else if (Ebene = 4)
OutputChar("`;", "semicolon")
else if (Ebene = 5)
SendUnicodeChar(0x03B8, "Greek_theta") ; theta
else if (Ebene = 6)
SendUnicodeChar(0x221D, "variation") ; proportional
return
neo_k:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a2",0x0137,0x0136)
or CheckDeadUni12("a6",0x1E33,0x1E32)))
OutputChar12("k","K","k","K")
else if (Ebene = 3)
OutputChar("{!}", "exclam")
else if (Ebene = 4)
OutputChar("¡", "exclamdown")
else if (Ebene = 5)
SendUnicodeChar(0x03F0, "U03F0") ; kappa symbol (varkappa)
else if (Ebene = 6)
SendUnicodeChar(0x221A, "radical") ; Wurzel
return
neo_l:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c4",0x013E,0x013D)
or CheckDeadUni12("a1",0x013A,0x0139)
or CheckDeadUni12("a2",0x013C,0x013B)
or CheckDeadUni12("a3",0x0142,0x0141)
or CheckDeadUni12("a6",0x1E37,0x1E36)))
OutputChar12("l","L","l","L")
else if (Ebene = 3)
OutputChar("[", "bracketleft")
else if (Ebene = 4)
OutputChar("{Up}", "Up")
else if (Ebene = 5)
SendUnicodeChar(0x03BB, "Greek_lambda") ; lambda
else if (Ebene = 6)
SendUnicodeChar(0x039B, "Greek_LAMBDA") ; Lambda
return
neo_m:
EbeneAktualisieren()
if (Ebene12 and !CheckDeadUni12("a6",0x1E41,0x1E40))
OutputChar12("m","M","m","M")
else if (Ebene = 3)
OutputChar("`%", "percent")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9)
or CheckDeadUni("a3",0x2081)))
OutputChar("{Numpad1}", "KP_1")
else if (Ebene = 5)
SendUnicodeChar(0x03BC, "Greek_mu") ; griechisch mu, micro wäre 0x00B5
else if (Ebene = 6)
SendUnicodeChar(0x21D4, "ifonlyif") ; doppelter Doppelpfeil (genau dann wenn)
return
neo_n:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c2",0x00F1,0x00D1)
or CheckDeadUni12("c4",0x0148,0x0147)
or CheckDeadUni12("a1",0x0144,0x0143)
or CheckDeadUni12("a2",0x0146,0x0145)
or CheckDeadUni12("a6",0x1E45,0x1E44)))
OutputChar12("n","N","n","N")
else if (Ebene = 3)
OutputChar("(", "parenleft")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074)
or CheckDeadUni("a3",0x2084)))
OutputChar("{Numpad4}", "KP_4")
else if (Ebene = 5)
SendUnicodeChar(0x03BD, "Greek_nu") ; nu
else if (Ebene = 6)
SendUnicodeChar(0x2115, "U2115") ; N (natürliche Zahlen)
return
neo_o:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x00F4,0x00D4)
or CheckDeadUni12("c2",0x00F5,0x00D5)
or CheckDeadUni12("c4",0x01D2,0x01D1)
or CheckDeadUni12("c5",0x014F,0x014E)
or CheckDeadUni12("c6",0x014D,0x014C)
or CheckDeadUni12("g1",0x00F2,0x00D2)
or CheckDeadAsc12("g3","ö","Ö")
or CheckDeadUni12("a1",0x00F3,0x00D3)
or CheckDeadUni12("a2",0x01EB,0x01EA)
or CheckDeadUni12("a3",0x00F8,0x00D8)
or CheckDeadUni12("a4",0x0151,0x0150)))
OutputChar12("o","O","o","O")
else if (Ebene = 3)
OutputChar("*", "asterisk")
else if (Ebene = 4)
OutputChar("{End}", "End")
else if (Ebene = 5)
SendUnicodeChar(0x03BF, "Greek_omicron") ; omicron
else if (Ebene = 6)
SendUnicodeChar(0x2208, "elementof") ; element of
return
neo_p:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a6",0x1E57,0x1E56)))
OutputChar12("p","P","p","P")
else if ((Ebene = 3) and !(CheckDeadUni("c2",0x2248)))
OutputChar("~", "asciitilde")
else if (Ebene = 4)
OutputChar("{Enter}", "Return")
else if (Ebene = 5)
SendUnicodeChar(0x03C0, "Greek_pi") ; pi
else if (Ebene = 6)
SendUnicodeChar(0x03A0, "Greek_PI") ; Pi
return
neo_q:
EbeneAktualisieren()
if (Ebene12)
OutputChar12("q","Q","q","Q")
else if (Ebene = 3)
OutputChar("{&}", "ampersand")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x207A)
or CheckDeadUni("a3",0x208A)))
OutputChar("{NumPadAdd}", "KP_Add")
else if (Ebene = 5)
SendUnicodeChar(0x03D5, "U03D5") ; phi symbol (varphi)
else if (Ebene = 6)
SendUnicodeChar(0x211A, "U211A") ; Q (rationale Zahlen)
return
neo_r:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c4",0x0159,0x0158)
or CheckDeadUni12("g3",0x1E5B,0x1E5A)
or CheckDeadUni12("a1",0x0155,0x0154)
or CheckDeadUni12("a2",0x0157,0x0156)
or CheckDeadUni12("a6",0x0E59,0x0E58)))
OutputChar12("r","R","r","R")
else if (Ebene = 3)
OutputChar(")", "parenright")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075)
or CheckDeadUni("a3",0x2085)))
OutputChar("{Numpad5}", "KP_5")
else if (Ebene = 5)
SendUnicodeChar(0x03F1, "U03F1") ; rho symbol (varrho)
else if (Ebene = 6)
SendUnicodeChar(0x211D, "U221D") ; R (reelle Zahlen)
return
neo_s:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a1",0x015B,0x015A)
or CheckDeadUni12("a2",0x015F,0x015E)
or CheckDeadUni12("a6",0x1E61,0x1E60)
or CheckDeadUni12("c1",0x015D,0x015C)
or CheckDeadUni12("c4",0x0161,0x0160)
or CheckDeadUni12("a6",0x1E63,0x1A62))) {
if (LangSTastatur and (Ebene = 1))
SendUnicodeChar(0x017F, "17F") ; langes s
else OutputChar12("s","S","s","S")
} else if (Ebene = 3)
OutputChar("?", "question")
else if (Ebene = 4)
OutputChar("¿", "questiondown")
else if (Ebene = 5)
SendUnicodeChar(0x03C3, "Greek_sigma") ;sigma
else if (Ebene = 6)
SendUnicodeChar(0x03A3, "Greek_SIGMA") ;Sigma
return
neo_t:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a2",0x0163,0x0162)
or CheckDeadUni12("a6",0x1E6B,0x1E6A)
or CheckDeadUni12("c4",0x0165,0x0164)
or CheckDeadUni( "g3",0x1E97)))
OutputChar12("t","T","t","T")
else if (Ebene = 3)
OutputChar("-", "minus") ; Bisstrich
else if (Ebene = 4) and !(CheckDeadUni("c1",0x2076)
or CheckDeadUni("c5",0x2086))
OutputChar("{Numpad6}", "KP_6")
else if (Ebene = 5)
SendUnicodeChar(0x03C4, "Greek_tau") ; tau
else if (Ebene = 6)
SendUnicodeChar(0x2202, "partialderivative") ; partielle Ableitung
return
neo_u:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x00FB,0x00DB)
or CheckDeadUni12("c2",0x0169,0x0168)
or CheckDeadUni12("c3",0x016F,0x016E)
or CheckDeadUni12("c4",0x01D4,0x01D3)
or CheckDeadUni12("c5",0x016D,0x016C)
or CheckDeadUni12("c6",0x016B,0x016A)
or CheckDeadUni12("g1",0x00F9,0x00D9)
or CheckDeadAsc12("g3","ü","Ü")
or CheckDeadUni12("a1",0x00FA,0x00DA)
or CheckDeadUni12("a2",0x0173,0x0172)
or CheckDeadUni12("a4",0x0171,0x0170)))
OutputChar12("u","U","u","U")
else if (Ebene = 3)
OutputChar("\", "backslash")
else if (Ebene = 4)
OutputChar("{Home}", "Home")
else if (Ebene = 6)
SendUnicodeChar(0x222E, "U222E") ; contour integral
return
neo_v:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a6",0x1E7F,0x1E7E)))
OutputChar12("v","V","v","V")
else if (Ebene = 3)
OutputChar("_","underscore")
else if (Ebene = 4) and (!lernModus or lernModus_neo_Backspace)
OutputChar("{Backspace}", "BackSpace")
else if (Ebene = 6)
SendUnicodeChar(0x2259, "U2259") ; estimates/entspricht
return
neo_w:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x0175,0x0174)))
OutputChar12("w","W","w","W")
else if (Ebene = 3)
OutputChar("{^}{space}", "asciicircum") ; Zirkumflex
else if (Ebene = 4)
OutputChar("{Insert}", "Insert") ; Einfg
else if (Ebene = 5)
SendUnicodeChar(0x03C9, "Greek_omega") ; omega
else if (Ebene = 6)
SendUnicodeChar(0x03A9, "Greek_OMEGA") ; Omega
return
neo_x:
EbeneAktualisieren()
if Ebene12
OutputChar12("x","X","x","X")
else if (Ebene = 3)
OutputChar("", "ellipsis") ; Ellipse horizontal
else if (Ebene = 4)
SendUnicodeChar(0x22EE, "U22EE") ; Ellipse vertikal
else if (Ebene = 5)
SendUnicodeChar(0x03BE, "Greek_xi") ; xi
else if (Ebene = 6)
SendUnicodeChar(0x039E, "Greek_XI") ; Xi
return
neo_y:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c1",0x0177,0x0176)
or CheckDeadAsc12("g3","ÿ","Ÿ")
or CheckDeadUni12("a1",0x00FD,0x00DD)))
OutputChar12("y","Y","y","Y")
else if (Ebene = 3)
OutputChar("@", "at")
else if (Ebene = 4)
OutputChar(".", "period")
else if (Ebene = 5)
SendUnicodeChar(0x03C5, "Greek_upsilon") ; upsilon
else if (Ebene = 6)
SendUnicodeChar(0x2207, "nabla") ; nabla
return
neo_z:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a1",0x017A,0x0179)
or CheckDeadUni12("a6",0x017C,0x017B)
or CheckDeadUni12("c4",0x017E,0x017D)))
OutputChar12("z","Z","z","Z")
else if (Ebene = 3)
OutputChar("``{space}", "grave") ; untot
else if (Ebene = 4)
send {Ctrl down}z{Ctrl up}
else if (Ebene = 5)
SendUnicodeChar(0x03B6, "Greek_zeta") ; zeta
else if (Ebene = 6)
SendUnicodeChar(0x2124, "U2124") ; Z (ganze Zahlen)
return
neo_ä:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c6",0x01DF,0x01DE)))
OutputChar12("ä","Ä","adiaeresis","Adiaeresis")
else if (Ebene = 3)
OutputChar("|", "bar")
else if (Ebene = 4)
OutputChar("{PgDn}", "Next")
else if (Ebene = 5)
SendUnicodeChar(0x03B7, "Greek_eta") ; eta
else if (Ebene = 6)
SendUnicodeChar(0x2135, "U2135") ; Kardinalzahlen, Aleph-Symbol
return
neo_ö:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("c6",0x022B,0x022A)))
OutputChar12("ö","Ö","odiaeresis","Odiaeresis")
else if (Ebene = 3)
OutputChar("$", "dollar")
else if (Ebene = 4)
OutputChar("{Tab}", "Tab")
else if (Ebene = 6)
SendUnicodeChar(0x2111, "U2221") ; Fraktur I
return
neo_ü:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni12("a1",0x01D8,0x01D7)
or CheckDeadUni12("g1",0x01DC,0x01DB)
or CheckDeadUni12("c4",0x01DA,0x01D9)
or CheckDeadUni12("c6",0x01D6,0x01D5)))
OutputChar12("ü","Ü","udiaeresis","Udiaeresis")
else if (Ebene = 3)
if isMod2Locked
OutputChar("{Shift Up}{#}", "numbersign")
else OutputChar("{blind}{#}", "numbersign")
else if (Ebene = 4)
OutputChar("{Esc}", "Escape")
else if (Ebene = 6)
SendUnicodeChar(0x211C, "U221C") ; Fraktur R
return
neo_sz:
EbeneAktualisieren()
if (Ebene = 1)
if LangSTastatur
OutputChar("s", "s")
else OutputChar("ß", "ssharp")
else if (Ebene = 2)
SendUnicodeChar(0x1E9E, "U1E9E") ; versal-ß
else if (Ebene = 3)
if LangSTastatur
OutputChar("ß", "ssharp")
else SendUnicodeChar(0x017F, "17F") ; langes s
else if (Ebene = 5)
SendUnicodeChar(0x03C2, "Greek_finalsmallsigma") ; varsigma
else if (Ebene = 6)
SendUnicodeChar(0x2218, "jot") ; Verknüpfungsoperator
return
neo_0:
noCaps = 1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x2070) ; Hochgestellte 0
or CheckDeadUni("a3",0x2080)) ; Tiefgestellte 0
OutputChar12(0,"",0,"rightdoublequotemark")
else if (Ebene = 3)
OutputChar("", "rightsingleqoutemark")
else if (Ebene = 4)
OutputChar("{NumpadSub}", "KP_Minus")
else if (Ebene = 5)
SendUnicodeChar(0x2080, "U2080")
else if (Ebene = 6)
SendUnicodeChar(0x2205, "emptyset") ; leere Menge
return
neo_1:
noCaps=1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x00B9) ; Hochgestellte 1
or CheckDeadUni("a3",0x2081)) ; Tiefgestellte 1
OutputChar12(1,"°",1,"degree")
else if (Ebene = 3)
OutputChar("¹", "onesuperior") ; Hochgestellte 1
else if (Ebene = 4)
OutputChar("º", "U00BA") ; männlicher Ordinalindikator (º)
else if (Ebene = 5)
SendUnicodeChar(0x2081, "U2081") ; Tiefgestellte 1
else if (Ebene = 6)
OutputChar("¬", "notsign") ; Nicht-Symbol
return
neo_2:
noCaps = 1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x00B2) ; Hochgestellte 2
or CheckDeadUni("a3",0x2082)) ; Tiefgestellte 2
OutputChar12(2,"§",2,"section")
else if (Ebene = 3)
OutputChar("²", "twosuperior") ; Hochgestellte 2
else if (Ebene = 4)
OutputChar("ª", "U00AA") ; weiblicher Ordinalindikator (ª)
else if (Ebene = 5)
SendUnicodeChar(0x2082, "U2082") ; Tiefgestellte 2
else if (Ebene = 6)
SendUnicodeChar(0x2228, "logicalor") ; Logisches Oder
return
neo_3:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !(CheckDeadUni("c1",0x00B3) ; Hochgestellte 3
or CheckDeadUni("a3",0x2083)) ; Tiefgestellte 3
OutputChar(3,3)
else if (Ebene = 2)
SendUnicodeChar(0x2113, "U2113") ; kleines l (Skript)
else if (Ebene = 3)
OutputChar("³", "threesuperior") ; Hochgestellte 3
else if (Ebene = 4)
SendUnicodeChar(0x2116, "numerosign") ; Numero
else if (Ebene = 5)
SendUnicodeChar(0x2083, "U2083") ; Tiefgestellte 3
else if (Ebene = 6)
SendUnicodeChar(0x2227, "logicaland") ; Logisches Und
return
neo_4:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !(CheckDeadUni("c1",0x2074) ; Hochgestellte 4
or CheckDeadUni("a3",0x2084)) ; Tiefgestellte 4
OutputChar(4,4)
else if (Ebene = 2)
OutputChar("»", "guillemotright")
else if (Ebene = 3)
OutputChar("", "U230A") ; Single guillemot right
else if (Ebene = 4)
OutputChar("{PgUp}", "Prior") ; Bild auf
else if (Ebene = 5)
OutputChar("", "dagger") ; Kreuz
else if (Ebene = 6)
SendUnicodeChar(0x22A5, "uptack") ; Senkrecht
return
neo_5:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !(CheckDeadUni("c1",0x2075) ; Hochgestellte 5
or CheckDeadUni("a3",0x2085)) ; Tiefgestellte 5
OutputChar(5,5)
else if (Ebene = 2)
OutputChar("«", "guillemotleft") ; Double guillemot left
else if (Ebene = 3)
OutputChar("", "U2039") ; Single guillemot left
else if (Ebene = 5)
SendUnicodeChar(0x2640, "femalesymbol")
else if (Ebene = 6)
SendUnicodeChar(0x2221, "U2221") ; Winkel
return
neo_6:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !(CheckDeadUni("c1",0x2076) ; Hochgestellte 6
or CheckDeadUni("a3",0x2086)) ; Tiefgestellte 6
OutputChar(6,6)
else if (Ebene = 2)
SendUnicodeChar(0x20AC, "EuroSign")
else if (Ebene = 3)
OutputChar("¢", "cent")
else if (Ebene = 4)
OutputChar("£", "sterling")
else if (Ebene = 5)
SendUnicodeChar(0x2642, "malesymbol")
else if (Ebene = 6)
SendUnicodeChar(0x2225, "U2225") ; parallel
return
neo_7:
noCaps = 1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x2077) ; Hochgestellte 7
or CheckDeadUni("a3",0x2087)) ; Tiefgestellte 7
OutputChar12(7,"$",7,"dollar")
else if (Ebene = 3)
OutputChar("¥", "yen")
else if (Ebene = 4)
OutputChar("¤", "currency")
else if (Ebene = 5)
SendUnicodeChar(0x03BA, "Greek_kappa") ; greek small letter kappa
else if (Ebene = 6)
SendUnicodeChar(0x2192, "rightarrow") ; Rechtspfeil
return
neo_8:
noCaps = 1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x2078) ; Hochgestellte 8
or CheckDeadUni("a3",0x2088)) ; Tiefgestellte 8
OutputChar12(8,"",8,"doublelowquotemark")
else if (Ebene = 3)
OutputChar("", "singlelowquotemark")
else if (Ebene = 4)
OutputChar("{NumpadDiv}", "KP_Divide")
else if (Ebene = 5)
SendUnicodeChar(0x27E8, "U27E8") ; bra (öffnende spitze Klammer)
else if (Ebene = 6)
SendUnicodeChar(0x221E, "infinity")
return
neo_9:
noCaps = 1
EbeneAktualisieren()
if Ebene12 and !(CheckDeadUni("c1",0x2079) ; Hochgestellte 9
or CheckDeadUni("a3",0x2089)) ; Tiefgestellte 9
OutputChar12(9,"",9,"leftdoublequotemark")
else if (Ebene = 3)
OutputChar("", "leftsinglequotemark")
else if (Ebene = 4)
OutputChar("{NumpadMult}", "KP_Multiply")
else if (Ebene = 5)
SendUnicodeChar(0x27E9, "U27E9") ; ket (schließende spitze Klammer)
else if (Ebene = 6)
SendUnicodeChar(0x2226, "U2226") ; nicht parallel
return
neo_punkt:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1)
OutputChar(".", "period")
else if (Ebene = 2)
SendUnicodeChar(0x2023, "") ; Dreieckiges Aufzählungszeichen
else if (Ebene = 3)
OutputChar("'", "apostrophe")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3)
or CheckDeadUni("t4",0x2083)))
OutputChar("{Numpad3}", "KP_3")
else if (Ebene = 5)
SendUnicodeChar(0x03D1, "U03D1") ; theta symbol (vartheta)
else if (Ebene = 6)
SendUnicodeChar(0x0398, "Greek_THETA") ; Theta
return
neo_komma:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1)
OutputChar(",", "comma")
else if (Ebene = 2)
OutputChar("", "enfilledcircbullet") ; Bullet
else if (Ebene = 3)
OutputChar(Chr(34), "quotedbl")
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2)
or CheckDeadUni("c5",0x2082)))
OutputChar("{Numpad2}", "KP_2")
else if (Ebene = 5)
SendUnicodeChar(0x03C1, "Greek_rho") ; rho
else if (Ebene = 6)
SendUnicodeChar(0x21D2, "implies") ; Doppelpfeil rechts
return
neo_strich:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("-", "minus") ; Bindestrich-Minus
else if (Ebene = 2)
SendUnicodeChar(0x2013, "endash") ; Gedankenstrich
else if (Ebene = 3)
SendUnicodeChar(0x2014, "emdash") ; Englischer Gedankenstrich (Geviertstrich)
else if (Ebene = 5)
SendUnicodeChar(0x2011, "U2011") ; geschützter Bindestrich (Bindestrich ohne Zeilenumbruch)
else if (Ebene = 6)
SendUnicodeChar(0x00AD, "hyphen") ; weicher Bindestrich
return
*space::
if einHandNeo
spacepressed := 1
else goto neo_SpaceUp
return
*space up::
if einHandNeo
if keypressed {
keypressed := 0
spacepressed := 0
} else goto neo_SpaceUp
return
neo_SpaceUp:
EbeneAktualisieren()
if (Ebene = 1) and !CheckDeadUni("a3",0x2010) ; Echter Bindestrich
OutputChar("{Space}", "Space")
else if (Ebene = 2) or (Ebene = 3)
Send {blind}{Space}
else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2070)
or CheckDeadUni("a3",0x2080)))
OutputChar("{Numpad0}", "KP_0")
else if (Ebene = 5)
SendUnicodeChar(0x00A0, "U00A0") ; geschütztes Leerzeichen
else if (Ebene = 6)
SendUnicodeChar(0x202F, "U202F") ; schmales geschütztes Leerzeichen
DeadKey := ""
CompKey := ""
spacepressed := 0
keypressed := 0
return
*Enter::
EbeneAktualisieren()
if !lernModus or lernModus_std_Return {
if (Ebene = 4)
send {blind}{NumpadEnter}
else send {blind}{Enter}
DeadKey := ""
CompKey := ""
} return
*Backspace::
if !lernModus or lernModus_std_Backspace {
send {Blind}{Backspace}
DeadKey := ""
CompKey := ""
} return
*Del::
if !lernModus or lernModus_std_Entf
send {Blind}{Del}
return
*Ins::
if !lernModus or lernModus_std_Einf
send {Blind}{Ins}
return
neo_tab:
EbeneAktualisieren()
if IsMod3Pressed() { ; Compose!
DeadKey := "comp"
CompKey := ""
} else {
OutputChar("{Tab}", "Tab")
DeadKey := ""
CompKey := ""
} return
*Home::
if !lernModus or lernModus_std_Pos1 {
send {Blind}{Home}
DeadKey := ""
CompKey := ""
} return
*End::
if !lernModus or lernModus_std_Ende {
send {Blind}{End}
DeadKey := ""
CompKey := ""
} return
*PgUp::
if !lernModus or lernModus_std_PgUp {
send {Blind}{PgUp}
DeadKey := ""
CompKey := ""
} return
*PgDn::
if !lernModus or lernModus_std_PgDn {
send {Blind}{PgDn}
DeadKey := ""
CompKey := ""
} return
*Up::
if !lernModus or lernModus_std_Hoch {
send {Blind}{Up}
DeadKey := ""
CompKey := ""
} return
*Down::
if !lernModus or lernModus_std_Runter {
send {Blind}{Down}
DeadKey := ""
CompKey := ""
} return
*Left::
if !lernModus or lernModus_std_Links {
send {Blind}{Left}
DeadKey := ""
CompKey := ""
} return
*Right::
if !lernModus or lernModus_std_Rechts {
send {Blind}{Right}
DeadKey := ""
CompKey := ""
} return
neo_Numpad0:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad0}", "KP_0")
else if (Ebene = 2)
SendUnicodeChar(0x2423, "U2423") ; space sign
else if (Ebene = 3)
SendUnicodeChar(0x0025, "percent") ; Prozent
else if (Ebene = 4)
send {blind}{NumpadIns}
else if (Ebene = 5)
OutputChar("", "U2030") ; Promille
else if (Ebene = 6)
SendUnicodeChar(0x25A1, "U25A1") ; white square
return
neo_Numpad1:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad1}", "KP_1")
else if (Ebene = 2)
SendUnicodeChar(0x2666, "diamond") ; Karo
else if (Ebene = 3)
SendUnicodeChar(0x2194, "U2194") ; Links-Rechts-Pfeil
else if (Ebene = 4)
send {blind}{NumpadEnd}
else if (Ebene = 5)
SendUnicodeChar(0x2264, "lessthanequal")
else if (Ebene = 6)
SendUnicodeChar(0x230A, "downstile") ;linke Untergrenze
return
neo_Numpad2:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad2}", "KP_2")
else if (Ebene = 2)
SendUnicodeChar(0x2265, "heart")
else if (Ebene = 3)
SendUnicodeChar(0x2192, "downarrow")
else if (Ebene = 4)
send {blind}{NumpadDown}
else if (Ebene = 5)
SendUnicodeChar(0x222A, "union") ; Vereinigung
else if (Ebene = 6)
SendUnicodeChar(0x22C3, "U22C3") ; n-ary union
return
neo_Numpad3:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad3}", "KP_3")
else if (Ebene = 2)
SendUnicodeChar(0x2660, "U2660") ; Pik
else if (Ebene = 3)
SendUnicodeChar(0x21CC, "U21CC") ; Harpune
else if (Ebene = 4)
send {blind}{NumpadPgDn}
else if (Ebene = 5)
SendUnicodeChar(0x2265, "greaterthanequal")
else if (Ebene = 6)
SendUnicodeChar(0x230B, "U230B") ; rechte Untergrenze
return
neo_Numpad4:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad4}", "KP_4")
else if (Ebene = 2)
SendUnicodeChar(0x2663, "club") ; schwarzes Kreuz
else if (Ebene = 3)
SendUnicodeChar(0x2190, "leftarrow") ; Linkspfeil
else if (Ebene = 4)
send {blind}{NumpadLeft}
else if (Ebene = 5)
SendUnicodeChar(0x2282, "includein") ; Teilmenge
else if (Ebene = 6)
SendUnicodeChar(0x2286, "U2286") ; Teilmenge-gleich
return
neo_Numpad5:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad5}", "KP_5")
else if (Ebene = 2)
SendUnicodeChar(0x20AC, "EuroSign") ; Euro
else if (Ebene = 3)
SendUnicodeChar(0x00A6, "brokenbar")
else if (Ebene = 4)
send {blind}{NumPadClear} ; begin
else if (Ebene = 5)
SendUnicodeChar(0x22B6, "U22B6") ; original of
else if (Ebene = 6)
SendUnicodeChar(0x22B7, "U22B7") ; image of
return
neo_Numpad6:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad6}", "KP_6")
else if (Ebene = 3)
SendUnicodeChar(0x2192, "rightarrow") ; Rechtspfeil
else if (Ebene = 4)
send {blind}{NumpadRight}
else if (Ebene = 5)
SendUnicodeChar(0x2283, "includes") ; Obermenge
else if (Ebene = 6)
SendUnicodeChar(0x2287, "U2287") ; Obermenge-gleich
return
neo_Numpad7:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad7}", "KP_7")
else if (Ebene = 2)
SendUnicodeChar(0x2714, "U2714") ; check mark
else if (Ebene = 3)
SendUnicodeChar(0x2195, "U2195") ; Hoch-Runter-Pfeil
else if (Ebene = 4)
send {blind}{NumpadHome}
else if (Ebene = 5)
SendUnicodeChar(0x226A, "U226A") ; much less
else if (Ebene = 6)
SendUnicodeChar(0x2308, "upstile") ; linke Obergrenze
return
neo_Numpad8:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad8}", "KP_8")
else if (Ebene = 2)
SendUnicodeChar(0x2718, "U2718") ; ballot x
else if (Ebene = 3)
SendUnicodeChar(0x2191, "uparrow") ; Hochpfeil
else if (Ebene = 4)
send {blind}{NumpadUp}
else if (Ebene = 5)
SendUnicodeChar(0x2229, "intersection") ; Durchschnitt
else if (Ebene = 6)
SendUnicodeChar(0x22C2, "U22C2") ; n-ary intersection
return
neo_Numpad9:
EbeneAktualisieren()
if (Ebene = 1)
OutputChar("{Numpad9}", "KP_9")
else if (Ebene = 2)
SendUnicodeChar(0x2020, "dagger") ; Kreuz
else if (Ebene = 3)
SendUnicodeChar(0x20D7, "U20D7") ; Vektor
else if (Ebene = 4)
send {blind}{NumpadPgUp}
else if (Ebene = 5)
SendUnicodeChar(0x226B, "U226B") ; much greater
else if (Ebene = 6)
SendUnicodeChar(0x2309, "U2309") ; rechte Obergrenze
return
neo_NumLock:
EbeneAktualisieren()
if Ebene12
OutputChar("{Tab}", "Tab")
else if (Ebene = 3)
OutputChar("`=", "equal")
else if (Ebene = 4)
SendUnicodeChar(0x2260, "notequal") ; Ungleich zu
else if (Ebene = 5)
SendUnicodeChar(0x2248, "approxeq") ; Fast gleich
else if (Ebene = 6)
SendUnicodeChar(0x2261, "identical")
return
neo_NumpadDiv:
EbeneAktualisieren()
if Ebene12
OutputChar("{NumpadDiv}", "KP_Divide")
else if (Ebene = 3)
OutputChar("÷", "division")
else if (Ebene = 4)
SendUnicodeChar(0x2300, "U2300") ; diameter
else if (Ebene = 5)
SendUnicodeChar(0x2223, "U2223") ; divides
else if (Ebene = 6)
SendUnicodeChar(0x2044, "U2044") ; fraction slash
return
neo_NumpadMult:
EbeneAktualisieren()
if Ebene12
send {blind}{NumpadMult}
else if (Ebene = 3)
SendUnicodeChar(0x22C5, "U22C5") ; multiplication dot
else if (Ebene = 4)
SendUnicodeChar(0x2299, "U2299") ; circled dot
else if (Ebene = 5)
OutputChar("×", "multiply")
else if (Ebene = 6)
SendUnicodeChar(0x2297, "U2297") ; circled times
return
neo_NumpadSub:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni("c1",0x207B)
or CheckDeadUni("a3",0x208B)))
send {blind}{NumpadSub}
else if (Ebene = 3)
SendUnicodeChar(0x2212, "U2212") ; Echtes Minus
else if (Ebene = 4)
SendUnicodeChar(0x2296, "U2296") ; circled minus
else if (Ebene = 5)
SendUnicodeChar(0x2216, "U2216") ; set minus
else if (Ebene = 6)
SendUnicodeChar(0x2238, "U2238") ; dot minus
return
neo_NumpadAdd:
EbeneAktualisieren()
if (Ebene12 and !(CheckDeadUni("c1",0x207A)
or CheckDeadUni("a3",0x208A)))
send {blind}{NumpadAdd}
else if (Ebene = 3)
OutputChar("±", "plusminus")
else if (Ebene = 4)
SendUnicodeChar(0x2295, "U2295") ; circled plus
else if (Ebene = 5)
SendUnicodeChar(0x2213, "U2213") ; minus-plus
else if (Ebene = 6)
SendUnicodeChar(0x2214, "U2214") ; dot plus
return
neo_NumpadEnter:
send {blind}{NumpadEnter}
return
neo_NumpadDot:
EbeneAktualisieren()
if (Ebene = 1)
send {blind}{NumpadDot}
else if (Ebene = 2)
send {blind}.
else if (Ebene = 3)
send `,
else if (Ebene = 4)
send {blind}{NumpadDel}
else if (Ebene = 5)
SendUnicodeChar(0x2032, "minutes")
else if (Ebene = 6)
SendUnicodeChar(0x2033, "seconds")
return
neo_tot1:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !CheckDeadUni("c1",0x0302) ; Zirkumflex, tot
deadUni(0x02C6, "dead_circumflex", "c1")
else if (Ebene = 2) and !CheckDeadUni("c2",0x0303) ; Tilde, tot
deadUni(0x02DC, "dead_tilde", "c2")
else if (Ebene = 3) and !CheckDeadUni("c3",0x030A) ; Ring, tot
deadUni(0x02DA, "dead_breve", "c3")
else if (Ebene = 4) and !CheckDeadUni("c4",0x030C) ; Caron, tot
deadUni(0x02C7, "dead_caron", "c4")
else if (Ebene = 5) and !CheckDeadUni("c5",0x0306) ; Brevis, tot
deadUni(0x02D8, "dead_breve", "c5")
else if (Ebene = 6) and !CheckDeadUni("c6",0x0304) ; Makron, tot
deadAsc("¯", "dead_macron", "c6")
return
neo_tot2:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !CheckDeadUni("g1",0x0300) ; Gravis, tot
deadAsc("``{space}", "dead_grave", "g1")
else if (Ebene = 3) and !CheckDeadUni("g3",0x0308) ; Diärese, tot
deadUni(0x00A8, "dead_diaeresis", "g3")
else if (Ebene = 4) and !CheckDeadUni("g4",0x030F) ; Doppelgravis, tot
deadUni(0x02F5, "dead_doublegrave", "g4")
else if (Ebene = 5) and !CheckDeadUni("g5",0x0485) ; Spiritus asper, tot
deadUni(0x1FFE, "U1FFE", "g5")
return
neo_tot3:
noCaps = 1
EbeneAktualisieren()
if (Ebene = 1) and !CheckDeadUni("a1",0x0301) ; Akut, tot
deadAsc("{´}{space}", "dead_acute", "a1")
else if (Ebene = 2) and !CheckDeadUni("a2",0x0327) ; Cedille, tot
deadAsc("¸", "dead_cedilla", "a2")
else if (Ebene = 3) and !CheckDeadUni("a3",0x0337) ; Strich, tot
deadUni(0x002F, "dead_stroke", "a3")
else if (Ebene = 4) and !CheckDeadUni("a4",0x0338) ; Doppelakut, tot
deadUni(0x02DD, "dead_doubleacute", "a4")
else if (Ebene = 5) and !CheckDeadUni("a5",0x0486) ; Spiritus lenis, tot
deadUni(0x1FBF, "U1FBF", "a5")
else if (Ebene = 6) and !CheckDeadUni("a6",0x0307) ; Punkt darüber, tot
deadUni(0x02D9, "dead_abovedot", "a6")
return
/*
------------------------------------------------------
Methode KeyboardLED zur Steuerung der Keyboard-LEDs
(NumLock/CapsLock/ScrollLock-Lichter)
Benutzungshinweise: Man benutze
KeyboardLED(LEDvalue,"Cmd"), wobei
Cmd = on/off/switch,
LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4,
bzw. eine beliebige Summe dieser Werte:
AlleAus=0, CapsLock+NumLock=6, etc.
Der folgende Code wurde übernommen von:
http://www.autohotkey.com/forum/viewtopic.php?t=10532
Um eventuelle Wechselwirkungen mit dem bestehenden
Code (insb. der Unicode-Konvertierung) auszuschließen,
sind auch alle (Hilfsmethoden) mit dem Postfix LED
versehen worden.
------------------------------------------------------
*/
KeyboardLED(LEDvalue, Cmd) { ; LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 ; Cmd = on/off/switch
Static h_device
If !(h_device) { ; initialise
device=\Device\KeyBoardClass0
SetUnicodeStrLED(fn,device)
h_device:=NtCreateFileLED(fn,0+0x00000100+0x00000080+0x00100000,1,1,0x00000040+0x00000020,0)
}
VarSetCapacity(output_actual,4,0)
input_size=4
VarSetCapacity(input,input_size,0)
If Cmd=switch ;switches every LED according to LEDvalue
KeyLED:=LEDvalue
If Cmd=on ;forces all choosen LED's to ON (LEDvalue= 0 ->LED's according to keystate)
KeyLED:=LEDvalue | (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
If (Cmd=off) { ;forces all choosen LED's to OFF (LEDvalue= 0 ->LED's according to keystate)
LEDvalue:=LEDvalue ^ 7
KeyLED:=LEDvalue & (GetKeyState("ScrollLock","T") + 2*GetKeyState("NumLock","T") + 4*GetKeyState("CapsLock","T"))
}
; EncodeIntegerLED(KeyLED,1,&input,2) ;input bit pattern (KeyLED): bit 0 = scrolllock ;bit 1 = numlock ;bit 2 = capslock
input := Chr(1) Chr(1) Chr(KeyLED)
input := Chr(1)
input =
; ???
success:=DllCall("DeviceIoControl"
, "uint", h_device
, "uint", CTL_CODE_LED( 0x0000000b ; FILE_DEVICE_KEYBOARD
, 2
, 0 ; METHOD_BUFFERED
, 0 ) ; FILE_ANY_ACCESS
, "uint", &input
, "uint", input_size
, "uint", 0
, "uint", 0
, "uint", &output_actual
, "uint", 0 )
}
CTL_CODE_LED(p_device_type,p_function,p_method,p_access ) {
Return,( p_device_type << 16 ) | ( p_access << 14 ) | ( p_function << 2 ) | p_method
}
NtCreateFileLED(ByRef wfilename,desiredaccess,sharemode,createdist,flags,fattribs){
VarSetCapacity(fh,4,0)
VarSetCapacity(objattrib,24,0)
VarSetCapacity(io,8,0)
VarSetCapacity(pus,8)
uslen:=DllCall("lstrlenW","str",wfilename)*2
InsertIntegerLED(uslen,pus,0,2)
InsertIntegerLED(uslen,pus,2,2)
InsertIntegerLED(&wfilename,pus,4)
InsertIntegerLED(24,objattrib,0)
InsertIntegerLED(&pus,objattrib,8)
status:=DllCall("ntdll\ZwCreateFile","str",fh,"UInt",desiredaccess,"str",objattrib,"str",io,"UInt",0,"UInt",fattribs
,"UInt",sharemode,"UInt",createdist,"