Bildschirmtastatur gefixt
This commit is contained in:
parent
40e694da82
commit
a2050d5870
|
@ -1,822 +0,0 @@
|
|||
/******************
|
||||
* Initialisierung *
|
||||
*******************
|
||||
*/
|
||||
|
||||
SetCapsLockState Off
|
||||
SetNumLockState Off
|
||||
SetScrollLockState Off
|
||||
|
||||
name=Neo 2.0 (%A_ScriptName%) (r%Revision%-r%CompRevision%)
|
||||
enable=Aktiviere %name%
|
||||
disable=Deaktiviere %name%
|
||||
#LTrim ; Quelltext kann eingerückt werden,
|
||||
|
||||
/****************
|
||||
* 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 mit einer MsgBox explizit auf das Ein- und Ausschalten der alternativen Modi (Lernmodus, Einhandmodus, lang-s-Modus, VM-Belegung) hingewiesen werden?
|
||||
IniRead,zeigeModusBox,%ini%,Global,zeigeModusBox,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
|
||||
CharProc("LnS1")
|
||||
else
|
||||
KeyboardLED(2,"off") ; deaktivieren, falls sie doch brennt
|
||||
|
||||
IniRead,isVM,%ini%,Global,isVM,0
|
||||
if (isVM)
|
||||
CharProc("_VM1")
|
||||
|
||||
;Soll der Mod2Lock auch auf die Akzente, die Ziffernreihe und das Numpad angewandt werden?
|
||||
; Wird striktesMod2Lock auf 1 gesetzt, wirkt CapsLock wie ShiftLock
|
||||
IniRead,striktesMod2Lock,%ini%,Global,striktesMod2Lock,0
|
||||
|
||||
|
||||
/***********************
|
||||
* Resourcen-Verwaltung *
|
||||
************************
|
||||
*/
|
||||
if(FileExist("ResourceFolder")<>false){
|
||||
; Versuche, alle möglicherweise in die EXE eingebundenen Dateien zu extrahieren
|
||||
FileInstall,neo_enabled.ico,%ResourceFolder%\neo_enabled.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
|
||||
}
|
||||
}else{
|
||||
MsgBox,"Das Verzeichnis %ResourceFolder% konnte nicht angelegt werden!" ; Diese Zeile dient nur der eventuellen Fehlersuche und sollte eigentlich niemals auftauchen.
|
||||
}
|
||||
|
||||
; 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_enabled.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_enabled.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%
|
||||
|
||||
/*
|
||||
Sonstige Variablen
|
||||
*/
|
||||
guiErstellt := 0
|
||||
alwaysOnTop := 1
|
||||
wasNonShiftKeyPressed := 0
|
||||
isShiftRPressed := 0
|
||||
isShiftLPressed := 0
|
||||
isShiftPressed := 0
|
||||
isMod2Locked := 0
|
||||
IsMod3RPressed := 0
|
||||
IsMod3LPressed := 0
|
||||
IsMod3Pressed := 0
|
||||
IsMod4RPressed := 0
|
||||
IsMod4LPressed := 0
|
||||
IsMod4Pressed := 0
|
||||
IsMod4Locked := 0
|
||||
EbeneAktualisieren()
|
||||
; 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
|
||||
|
||||
|
||||
|
||||
EbeneAktualisieren() {
|
||||
global
|
||||
Modstate := IsMod4Active() . IsMod3Active()
|
||||
Ebene7 := 0
|
||||
Ebene8 := 0
|
||||
if (Modstate == "00") { ; Ebene 1 oder 2
|
||||
if (IsShiftActive()) ; Ebene 2: Shift oder CapsLock
|
||||
EbeneC := 2
|
||||
else ; Ebene 1: Ohne Mod oder CapsLock mit Shift
|
||||
EbeneC := 1
|
||||
if (IsShiftPressed) ; NC: Ebene 2: Shift (ignoriert CapsLock)
|
||||
EbeneNC := 2
|
||||
else ; NC: Ebene 1: Ohne Mod (ignoriert CapsLock)
|
||||
EbeneNC := 1
|
||||
} else if (Modstate == "01") { ; Ebene 3 oder 5 (ignoriert CapsLock)
|
||||
if (IsShiftPressed) ; Ebene 5: Shift+Mod3
|
||||
EbeneC := 5
|
||||
else ; Ebene 3: Mod3
|
||||
EbeneC := 3
|
||||
EbeneNC := EbeneC ; NC: gleich
|
||||
} else if (Modstate == "10") { ; Ebene 4 (Mit Shift: Auch Ebene 7) (ignoriert CapsLock)
|
||||
EbeneC := 4
|
||||
if (IsShiftPressed) ; Ebene 7: Shift+Mod4
|
||||
Ebene7 := 1
|
||||
EbeneNC := EbeneC ; NC: gleich
|
||||
} else if (ModState == "11") { ; Ebene 6 (Mit Shift Xoder CapsLock: Auch Ebene 8)
|
||||
EbeneC := 6
|
||||
if (IsShiftPressed) ; Ebene 8: Shift (ignoriert CapsLock)
|
||||
Ebene8 := 1
|
||||
EbeneNC := EbeneC ; NC: gleich
|
||||
}
|
||||
}
|
||||
|
||||
IsShiftActive() {
|
||||
global
|
||||
if (isMod2Locked)
|
||||
if (isShiftPressed)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
else
|
||||
if (isShiftPressed)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
IsMod3Active() {
|
||||
global
|
||||
return isMod3Pressed
|
||||
}
|
||||
|
||||
IsMod4Active() {
|
||||
global
|
||||
if (isMod4Locked)
|
||||
if (isMod4Pressed)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
else
|
||||
if (isMod4Pressed)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------
|
||||
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,"UInt",flags,"UInt",0,"UInt",0, "UInt")
|
||||
return ExtractIntegerLED(fh)
|
||||
}
|
||||
|
||||
SetUnicodeStrLED(ByRef out, str_){
|
||||
VarSetCapacity(st1, 8, 0)
|
||||
InsertIntegerLED(0x530025, st1)
|
||||
VarSetCapacity(out, (StrLen(str_)+1)*2, 0)
|
||||
DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
|
||||
}
|
||||
|
||||
ExtractIntegerLED(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4){
|
||||
; pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
|
||||
; The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
|
||||
; pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
|
||||
; pSource must be ByRef to avoid corruption during the formal-to-actual copying process
|
||||
; (since pSource might contain valid data beyond its first binary zero).
|
||||
Loop %pSize% ; Build the integer by adding up its bytes.
|
||||
result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
|
||||
if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
|
||||
return result ; Signed vs. unsigned doesn't matter in these cases.
|
||||
; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
|
||||
return -(0xFFFFFFFF - result + 1)
|
||||
}
|
||||
|
||||
InsertIntegerLED(pInteger, ByRef pDest, pOffset = 0, pSize = 4){
|
||||
; The caller must ensure that pDest has sufficient capacity. To preserve any existing contents in pDest,
|
||||
; only pSize number of bytes starting at pOffset are altered in it.
|
||||
Loop %pSize% ; Copy each byte in the integer into the structure as raw binary data.
|
||||
DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------
|
||||
Methoden zum Senden von Unicode-Zeichen
|
||||
------------------------------------------------------
|
||||
|
||||
Über den GTK-Workaround:
|
||||
Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html
|
||||
Der Aufruf von »SubStr(charCode,3)« geht davon aus, dass alle charCodes in Hex mit führendem „0x“ angegeben sind. Die abenteuerliche „^+u“-Konstruktion benötigt im Übrigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlerträchtig an dieser Stelle. Außerdem ein abschließend gesendetes Space, sonst bleibt der „eingetippte“ Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gewünschte Zeichen verwandelt.
|
||||
Optimierungen von http://fmate14.web.elte.hu/autohotkey/SendU/SendU.ahk
|
||||
*/
|
||||
|
||||
SendUnicodeChar(charCode){
|
||||
IfWinActive,ahk_class gdkWindowToplevel
|
||||
{
|
||||
StringLower,charCode,charCode
|
||||
send % "^+u" . SubStr(charCode,3) . " "
|
||||
} else {
|
||||
static ki := "#"
|
||||
if (ki =="#") {
|
||||
VarSetCapacity(ki,28*2,0)
|
||||
DllCall("RtlFillMemory","uint",&ki+ 0,"uint",1,"uint",1)
|
||||
DllCall("RtlFillMemory","uint",&ki+28+0,"uint",1,"uint",1)
|
||||
}
|
||||
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+ 6,"uint",4,"uint",0x40000|charCode) ;KEYEVENTF_UNICODE
|
||||
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+28+6,"uint",4,"uint",0x60000|charCode) ;KEYEVENTF_KEYUP|KEYEVENTF_UNICODE
|
||||
DllCall("SendInput","UInt",2,"UInt",&ki,"Int",28)
|
||||
}
|
||||
}
|
||||
|
||||
SendUnicodeCharDown(charCode){
|
||||
IfWinActive,ahk_class gdkWindowToplevel
|
||||
{
|
||||
StringLower,charCode,charCode
|
||||
send % "^+u" . SubStr(charCode,3) . " "
|
||||
} else {
|
||||
static ki := "#"
|
||||
if (ki =="#") {
|
||||
VarSetCapacity(ki,28,0)
|
||||
DllCall("RtlFillMemory","uint",&ki,"uint",1,"uint",1)
|
||||
}
|
||||
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+6,"uint",4,"uint",0x40000|charCode) ;KEYEVENTF_UNICODE
|
||||
DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
|
||||
}
|
||||
}
|
||||
|
||||
SendUnicodeCharUp(charCode){
|
||||
IfWinActive,ahk_class gdkWindowToplevel
|
||||
{
|
||||
; nothing
|
||||
} else {
|
||||
static ki := "#"
|
||||
if (ki =="#") {
|
||||
VarSetCapacity(ki,28,0)
|
||||
DllCall("RtlFillMemory","uint",&ki,"uint",1,"uint",1)
|
||||
}
|
||||
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+6,"uint",4,"uint",0x60000|charCode) ;KEYEVENTF_KEYUP|KEYEVENTF_UNICODE
|
||||
DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
|
||||
}
|
||||
}
|
||||
|
||||
/**********************
|
||||
* Tastenkombinationen *
|
||||
***********************
|
||||
*/
|
||||
|
||||
; dieser Hook fixt einen AHK-Bug, dass dieses bei Reload und gedruecktem Mod4
|
||||
; den ersten hook ausfuehrt, als waere dieser tatsaechlich aufgerufen worden.
|
||||
; Wenn man hier einen unverfaenglichen Hook eintraegt, gibt es keine Broesel.
|
||||
~F24::return
|
||||
|
||||
+pause::
|
||||
Suspend, Permit
|
||||
goto togglesuspend
|
||||
|
||||
/*****************
|
||||
* Menüfunktionen *
|
||||
******************
|
||||
*/
|
||||
togglesuspend:
|
||||
if A_IsSuspended {
|
||||
menu, tray, rename, %enable%, %disable%
|
||||
menu, tray, tip, %name%
|
||||
if (iconBenutzen)
|
||||
menu, tray, icon, %ResourceFolder%\neo_enabled.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.
|
||||
|
||||
~*VKA1SC136::
|
||||
if (isShiftLPressed and !isShiftRPressed and !wasNonShiftKeyPressed)
|
||||
ToggleMod2Lock()
|
||||
isShiftRPressed := 1
|
||||
isShiftPressed := 1
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
~*VKA1SC136 up::
|
||||
isShiftRPressed := 0
|
||||
isShiftPressed := isShiftLPressed
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
~*VKA0SC02A::
|
||||
if (isShiftRPressed and !isShiftLPressed and !wasNonShiftKeyPressed)
|
||||
ToggleMod2Lock()
|
||||
isShiftLPressed := 1
|
||||
isShiftPressed := 1
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
~*VKA0SC02A up::
|
||||
isShiftLPressed := 0
|
||||
isShiftPressed := isShiftRPressed
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
ToggleMod2Lock() {
|
||||
global
|
||||
if (isMod2Locked)
|
||||
{
|
||||
isMod2Locked := 0
|
||||
KeyboardLED(4,"off")
|
||||
}
|
||||
else
|
||||
{
|
||||
isMod2Locked := 1
|
||||
KeyBoardLED(4,"on")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
*VKBFSC02B::
|
||||
if (isMod3LPressed and !isMod3RPressed and !wasNonShiftKeyPressed)
|
||||
CharStarDown("MOD3", "MOD3", "SComp")
|
||||
isMod3RPressed := 1
|
||||
isMod3Pressed := 1
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
*VKBFSC02B up::
|
||||
if (isMod3LPressed)
|
||||
CharStarUp("MOD3")
|
||||
isMod3RPressed := 0
|
||||
isMod3Pressed := isMod3LPressed
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
*VK14SC03A::
|
||||
if (isMod3RPressed and !isMod3LPressed and !wasNonShiftKeyPressed)
|
||||
CharStarDown("MOD3", "MOD3", "SComp")
|
||||
isMod3LPressed := 1
|
||||
isMod3Pressed := 1
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
*VK14SC03A up::
|
||||
if (isMod3RPressed)
|
||||
CharStarUp("MOD3")
|
||||
isMod3LPressed := 0
|
||||
isMod3Pressed := isMod3RPressed
|
||||
EbeneAktualisieren()
|
||||
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.
|
||||
|
||||
*VKA5SC138::
|
||||
wasMod4RPressed := isMod4RPressed
|
||||
isMod4RPressed := 1
|
||||
isMod4Pressed := 1
|
||||
waswasNonShiftKeyPressed := wasNonShiftKeyPressed
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
if (isMod4LPressed and !wasMod4RPressed and !waswasNonShiftKeyPressed)
|
||||
ToggleMod4Lock()
|
||||
return
|
||||
|
||||
*VKA5SC138 up::
|
||||
isMod4RPressed := 0
|
||||
isMod4Pressed := isMod4LPressed
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
*VKE2SC056::
|
||||
wasMod4LPressed := isMod4LPressed
|
||||
isMod4LPressed := 1
|
||||
isMod4Pressed := 1
|
||||
waswasNonShiftKeyPressed := wasNonShiftKeyPressed
|
||||
wasNonShiftKeyPressed := 0
|
||||
EbeneAktualisieren()
|
||||
if (isMod4RPressed and !wasMod4LPressed and !waswasNonShiftKeyPressed)
|
||||
ToggleMod4Lock()
|
||||
return
|
||||
|
||||
*VKE2SC056 up::
|
||||
isMod4LPressed := 0
|
||||
isMod4Pressed := isMod4RPressed
|
||||
EbeneAktualisieren()
|
||||
return
|
||||
|
||||
ToggleMod4Lock() {
|
||||
global
|
||||
if (IsMod4Locked) {
|
||||
IsMod4Locked := 0
|
||||
if (UseMod4Light)
|
||||
KeyboardLED(1,"off")
|
||||
if (zeigeLockBox)
|
||||
TrayTip,Mod4-Feststellung,Die Feststellung wurde aufgehoben.,3,1
|
||||
} else {
|
||||
IsMod4Locked := 1
|
||||
if (UseMod4Light)
|
||||
KeyboardLED(1,"on")
|
||||
if (zeigeLockBox)
|
||||
TrayTip,Mod4-Feststellung,Um Mod4 wieder zu lösen`, drücke beide Mod4-Tasten gleichzeitig!,3,1
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------
|
||||
BildschirmTastatur
|
||||
------------------------------------------------------
|
||||
*/
|
||||
|
||||
F1::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch1
|
||||
else send {blind}{F1}
|
||||
return
|
||||
|
||||
F2::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch2
|
||||
else send {blind}{F2}
|
||||
return
|
||||
|
||||
F3::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch3
|
||||
else send {blind}{F3}
|
||||
return
|
||||
|
||||
F4::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch4
|
||||
else send {blind}{F4}
|
||||
return
|
||||
|
||||
F5::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch5
|
||||
else send {blind}{F5}
|
||||
return
|
||||
|
||||
F6::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Switch6
|
||||
else send {blind}{F6}
|
||||
return
|
||||
|
||||
F7::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto Show
|
||||
else send {blind}{F7}
|
||||
return
|
||||
|
||||
F8::
|
||||
if(isMod4Active() && zeigeBildschirmTastatur)
|
||||
goto ToggleAlwaysOnTop
|
||||
else send {blind}{F8}
|
||||
return
|
||||
|
||||
Switch1:
|
||||
tImage := ResourceFolder . "\ebene1.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch2:
|
||||
tImage := ResourceFolder . "\ebene2.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch3:
|
||||
tImage := ResourceFolder . "\ebene3.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch4:
|
||||
tImage := ResourceFolder . "\ebene4.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch5:
|
||||
tImage := ResourceFolder . "\ebene5.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch6:
|
||||
tImage := ResourceFolder . "\ebene6.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
SwitchDK:
|
||||
tImage := ResourceFolder . "\deadkeys.png"
|
||||
goto Switch
|
||||
Return
|
||||
|
||||
Switch:
|
||||
if (guiErstellt)
|
||||
{
|
||||
if (Image = tImage)
|
||||
goto Close
|
||||
else
|
||||
{
|
||||
Image := tImage
|
||||
SetTimer, Refresh
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Image := tImage
|
||||
goto Show
|
||||
}
|
||||
Return
|
||||
|
||||
Show:
|
||||
if (guiErstellt)
|
||||
{
|
||||
goto Close
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Image = "")
|
||||
{
|
||||
Image := ResourceFolder . "\ebene1.png"
|
||||
}
|
||||
yPosition := A_ScreenHeight -270
|
||||
Gui, Color, FFFFFF
|
||||
Gui, Add, Button, xm+5 gSwitch1, F1
|
||||
Gui, Add, Text, x+5, kleine Buchstaben
|
||||
Gui, Add, Button, xm+5 gSwitch2, F2
|
||||
Gui, Add, Text, x+5, große Buchstaben
|
||||
Gui, Add, Button, xm+5 gSwitch3, F3
|
||||
Gui, Add, Text, x+5, Satz-/Sonderzeichen
|
||||
Gui, Add, Button, xm+5 gSwitch4, F4
|
||||
Gui, Add, Text, x+5, Zahlen / Steuerung
|
||||
Gui, Add, Button, xm+5 gSwitch5, F5
|
||||
Gui, Add, Text, x+5, Sprachen
|
||||
Gui, Add, Button, xm+5 gSwitch6, F6
|
||||
Gui, Add, Text, x+5, Mathesymbole
|
||||
Gui, Add, Button, xm+5 gShow, F7
|
||||
Gui, Add, Text, x+5, An /
|
||||
Gui, Add, Text, y+3, Aus
|
||||
Gui, Add, Button, x+10 y+-30 gShow, F8
|
||||
Gui, Add, Text, x+5, OnTop
|
||||
Gui, Add, Button, xm+5 gSwitchDK, Deadkeys
|
||||
Gui, Add, Picture,AltSubmit ys w729 h199 vPicture, %Image%
|
||||
Gui, +AlwaysOnTop
|
||||
Gui, Show, y%yposition% Autosize
|
||||
; SetTimer, Refresh
|
||||
guiErstellt = 1
|
||||
}
|
||||
Return
|
||||
|
||||
Close:
|
||||
guiErstellt = 0
|
||||
Gui, Destroy
|
||||
Return
|
||||
|
||||
Refresh:
|
||||
If (Image != OldImage)
|
||||
{
|
||||
GuiControl, , Picture, %Image%
|
||||
OldImage := Image
|
||||
}
|
||||
Return
|
||||
|
||||
ToggleAlwaysOnTop:
|
||||
if (alwaysOnTop)
|
||||
{
|
||||
Gui, -AlwaysOnTop
|
||||
alwaysOnTop = 0
|
||||
}
|
||||
else
|
||||
{
|
||||
Gui, +AlwaysOnTop
|
||||
alwaysOnTop = 1
|
||||
}
|
||||
Return
|
|
@ -2,7 +2,7 @@ EnvGet, WindowsEnvTempFolder, TEMP
|
|||
ResourceFolder = %WindowsEnvTempFolder%\NEO2
|
||||
FileCreateDir, %ResourceFolder%
|
||||
|
||||
if (FileExist("ResourceFolder")) {
|
||||
if (FileExist("ResourceFolder")<>false) {
|
||||
FileInstall,neo_enabled.ico,%ResourceFolder%\neo_enabled.ico,1
|
||||
FileInstall,neo_disabled.ico,%ResourceFolder%\neo_disabled.ico,1
|
||||
iconBenutzen=1
|
||||
|
|
Loading…
Reference in New Issue