root/windows/neo-vars/src/Source/recycle.ahk @ 1137

Revision 1137, 23.0 KB (checked in by mösi, 5 years ago)

ticket#7: fixed, auch für Mod3 und Mod4.

  • Property svn:keywords set to Revision
RevLine 
[949]1/******************
2* Initialisierung *
3*******************
4*/
5
[1124]6#MaxThreadsPerHotKey 1
[1128]7Thread,Interrupt,-1,-1
[1093]8
[949]9SetBatchLines -1
10SetCapsLockState Off
11SetNumLockState Off
12SetScrollLockState Off
13
[1099]14name=Neo 2.0 (%A_ScriptName%) (r%Revision%-r%CompRevision%)
[949]15enable=Aktiviere %name%
16disable=Deaktiviere %name%
17#usehook on
18#singleinstance force
19#LTrim ; Quelltext kann einger�ckt werden,
20Process,Priority,,High
21Sendmode Input
22#MaxHotkeysPerInterval 2000
23
24/****************
25* Verzeichnisse *
26*****************
27*/
28; Setzt den Pfad zu einem tempor�ren Verzeichnis
29EnvGet, WindowsEnvTempFolder, TEMP
30ResourceFolder = %WindowsEnvTempFolder%\NEO2
31FileCreateDir, %ResourceFolder%
32
33; Setzt den Pfad zu den NEO-Anwendungsdateien
34EnvGet, WindowsEnvAppDataFolder, APPDATA
35ApplicationFolder = %WindowsEnvAppDataFolder%\NEO2
36FileCreateDir, %ApplicationFolder%
37ini = %ApplicationFolder%\NEO2.ini
38
39/*******************
40* Globale Schalter *
41********************
42*/
43; Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0:
44
45; 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)
46bildschirmTastaturEinbinden := 1
47
48; Syntaxhinweis: IniRead, Variable, InputFilename, Section, Key [, DefaultValue]
49
50; Soll der Treiber im Einhandmodus betrieben werden?
51IniRead,einHandNeo,%ini%,Global,einHandNeo,0
52
53; Soll der Lernmodus aktiviert werden?
54IniRead,lernModus,%ini%,Global,lernModus,0
55
56; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden?
57IniRead,zeigeLockBox,%ini%,Global,zeigeLockBox,1
58
59; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)?
60IniRead,UseMod4Light,%ini%,Global,UseMod4Light,1
61
62; Soll Lang-s auf s, s auf � und � auf Lang-s gelegt (bzw. vertauscht) werden?
63IniRead,LangSTastatur,%ini%,Global,LangSTastatur,0
64If LangSTastatur
65  CharProc("LnS1")
66else
67  KeyboardLED(2,"off") ; deaktivieren, falls sie doch brennt
68
69IniRead,isVM,%ini%,Global,isVM,0
70if (isVM)
71  CharProc("_VM1")
72
[1076]73;Soll der Mod2Lock auch auf die Akzente, die Ziffernreihe und das Numpad angewandt werden?
74; Wird striktesMod2Lock auf 1 gesetzt, wirkt CapsLock wie ShiftLock
75IniRead,striktesMod2Lock,%ini%,Global,striktesMod2Lock,0
[949]76
77
78/***********************
[1087]79* Resourcen-Verwaltung *
[949]80************************
81*/
82if(FileExist("ResourceFolder")<>false){
83  ; Versuche, alle m�glicherweise in die EXE eingebundenen Dateien zu extrahieren
[1096]84  FileInstall,neo_enabled.ico,%ResourceFolder%\neo_enabled.ico,1
[949]85  FileInstall,neo_disabled.ico,%ResourceFolder%\neo_disabled.ico,1
86  iconBenutzen=1
87  if (bildschirmTastaturEinbinden=1){
88    FileInstall,ebene1.png,%ResourceFolder%\ebene1.png,1
89    FileInstall,ebene2.png,%ResourceFolder%\ebene2.png,1
90    FileInstall,ebene3.png,%ResourceFolder%\ebene3.png,1
91    FileInstall,ebene4.png,%ResourceFolder%\ebene4.png,1
92    FileInstall,ebene5.png,%ResourceFolder%\ebene5.png,1
93    FileInstall,ebene6.png,%ResourceFolder%\ebene6.png,1
94    zeigeBildschirmTastatur=1
95  }
96}else{
97  MsgBox,"Das Verzeichnis %ResourceFolder% konnte nicht angelegt werden!" ; Diese Zeile dient nur der eventuellen Fehlersuche und sollte eigentlich niemals auftauchen.
98}
99
100; Benutze die Dateien auch dann, wenn sie eventuell im aktuellen Verzeichnis vorhanden sind
101if(FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
102  zeigeBildschirmTastatur=1
[1096]103if(FileExist("neo_enabled.ico")&&FileExist("neo_disabled.ico"))
[949]104  iconBenutzen=1
105
106/*******************************************
107* �berpr�fung auf deutsches Tastaturlayout *
108********************************************
109*/
110regread,inputlocale,HKEY_CURRENT_USER,Keyboard Layout\Preload,1
111regread,inputlocalealias,HKEY_CURRENT_USER,Keyboard Layout\Substitutes,%inputlocale%
112if (inputlocalealias<>inputlocale=%inputlocalealias% and inputlocale<>00000407) {
113  suspend   
114  regread,inputlocale,HKEY_LOCAL_MACHINE,SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale%,Layout Text
115  msgbox, 48, Warnung!,
116    (
117    Nicht kompatibles Tastaturlayout:   
118    `t%inputlocale%   
119    `nDas deutsche QWERTZ muss als Standardlayout eingestellt 
120    sein, damit %name% wie erwartet funktioniert.   
121    `n�ndern Sie die Tastatureinstellung unter
122    `tSystemsteuerung   
123    `t-> Regions- und Sprachoptionen   
124    `t-> Sprachen
125    `t-> Details...   `n
126    )
127  exitapp
128}
129
130/*************************
131* Men� des Systray-Icons *
132**************************
133*/
134if (iconBenutzen)
[1096]135  menu,tray,icon,%ResourceFolder%\neo_enabled.ico,,1
[949]136menu,tray,nostandard
137menu,tray,add,�ffnen,open
138  menu,helpmenu,add,About,about
139  menu,helpmenu,add,Autohotkey-Hilfe,help
140  menu,helpmenu,add
141  menu,helpmenu,add,http://autohotkey.com/,autohotkey
142  menu,helpmenu,add,http://www.neo-layout.org/,neo
143menu,tray,add,Hilfe,:helpmenu
144menu,tray,add
145menu,tray,add,%disable%,togglesuspend
146menu,tray,add
147menu,tray,add,Bearbeiten,edit
148menu,tray,add,Neu Laden,reload
149menu,tray,add
150menu,tray,add,Nicht im Systray anzeigen,hide
151menu,tray,add,%name% beenden, exitprogram
152menu,tray,default,%disable%
153menu,tray,tip,%name%
154
155/*
156Sonstige Variablen
157*/
158guiErstellt := 0
159alwaysOnTop := 1
[1133]160wasNonShiftKeyPressed := 0
[1074]161isShiftRPressed := 0
162isShiftLPressed := 0
163isShiftPressed := 0
164isMod2Locked := 0
165IsMod3RPressed := 0
166IsMod3LPressed := 0
167IsMod3Pressed := 0
168IsMod4RPressed := 0
169IsMod4LPressed := 0
170IsMod4Pressed := 0
[949]171IsMod4Locked := 0
[1124]172EbeneAktualisieren()
[949]173; die Nachfolgenden sind n�tzlich um sich die Qwertz-Tasten abzugew�hnen, da alle auf der 4. Ebene vorhanden.
174lernModus_std_Return := 0
175lernModus_std_Backspace := 0
176lernModus_std_PgUp := 0
177lernModus_std_PgDn := 0
178lernModus_std_Einf := 0
179lernModus_std_Entf := 0
180lernModus_std_Pos0 := 0
181lernModus_std_Ende := 0
182lernModus_std_Hoch := 0
183lernModus_std_Runter := 0
184lernModus_std_Links := 0
185lernModus_std_Rechts := 0
186lernModus_std_ZahlenReihe := 0
187
188; im folgenden kann man auch noch ein paar Tasten der 4. Ebene deaktivieren
189; n�tzlich um sich zu zwingen, richtig zu schreiben
190lernModus_neo_Backspace := 0
191lernModus_neo_Entf := 1
192
193
194
195EbeneAktualisieren()
196{
197  global
[1080]198  Modstate := IsMod4Active() . IsMod3Active()
[949]199  Ebene7 := 0
200  Ebene8 := 0
[1080]201  if        (Modstate == "00") { ; Ebene 1 oder 2
202    if (IsShiftActive())         ; Ebene 2: Shift oder CapsLock
203      Ebene := 2
204    else                         ; Ebene 1: Ohne Mod oder CapsLock mit Shift
205      Ebene := 1
206    if (IsShiftPressed)          ; NC: Ebene 2: Shift (ignoriert CapsLock)
207      EbeneNC := 2
208    else                         ; NC: Ebene 1: Ohne Mod (ignoriert CapsLock)
209      EbeneNC := 1
210  } else if (Modstate == "01") { ; Ebene 3 oder 5 (ignoriert CapsLock)
211    if (IsShiftPressed)          ; Ebene 5: Shift+Mod3
212      Ebene := 5
213    else                         ; Ebene 3: Mod3
214      Ebene := 3
215    EbeneNC := Ebene             ; NC: gleich
216  } else if (Modstate == "10") { ; Ebene 4 (Mit Shift: Auch Ebene 7) (ignoriert CapsLock)
[1074]217    Ebene := 4
[1080]218    if (IsShiftPressed)          ; Ebene 7: Shift+Mod4
219      Ebene7 := 1
[1081]220    EbeneNC := Ebene             ; NC: gleich
[1080]221  } else if (ModState == "11") { ; Ebene 6 (Mit Shift Xoder CapsLock: Auch Ebene 8)
[1074]222    Ebene := 6
[1081]223    if (IsShiftPressed)          ; Ebene 8: Shift (ignoriert CapsLock)
[1080]224      Ebene8 := 1
[1081]225    EbeneNC := Ebene             ; NC: gleich
[1067]226  }
[949]227}
228
[1074]229IsShiftActive() {
[949]230  global
[1074]231  if (isMod2Locked)
232    if (isShiftPressed)
[949]233      return 0
234    else
235      return 1
236  else
[1074]237    if (isShiftPressed)
[949]238      return 1
239    else
240      return 0
241}
242
[1074]243IsMod3Active() {
[949]244   global
[1074]245   return isMod3Pressed
[949]246}
247
[1074]248IsMod4Active() {
249  global
250  if (isMod4Locked)
251    if (isMod4Pressed)
252      return 0
253    else
254      return 1
255  else
256    if (isMod4Pressed)
257      return 1
258    else
259      return 0
[949]260}
261
262/*
263   ------------------------------------------------------
264   Methode KeyboardLED zur Steuerung der Keyboard-LEDs
265   (NumLock/CapsLock/ScrollLock-Lichter)
266   
267   Benutzungshinweise: Man benutze
268   KeyboardLED(LEDvalue,"Cmd"), wobei
269   Cmd = on/off/switch,
270   LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4,
271   bzw. eine beliebige Summe dieser Werte:
272   AlleAus=0, CapsLock+NumLock=6, etc.
273   
274   Der folgende Code wurde �bernommen von:
275   http://www.autohotkey.com/forum/viewtopic.php?t=10532
276   
277   Um eventuelle Wechselwirkungen mit dem bestehenden
278   Code (insb. der Unicode-Konvertierung) auszuschlie�en,
279   sind auch alle (Hilfsmethoden) mit dem Postfix LED
280   versehen worden.
281   ------------------------------------------------------
282*/
283
284KeyboardLED(LEDvalue, Cmd){ ; LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 ; Cmd = on/off/switch
285  Static h_device
286  If ! h_device ; initialise
287  {
288    device=\Device\KeyBoardClass0
289    SetUnicodeStrLED(fn,device)
290    h_device:=NtCreateFileLED(fn,0+0x00000100+0x00000080+0x00100000,1,1,0x00000040+0x00000020,0)
291  }
292  VarSetCapacity(output_actual,4,0)
293  input_size=4
294  VarSetCapacity(input,input_size,0)
295  If Cmd=switch ;switches every LED according to LEDvalue
296   KeyLED:=LEDvalue
297  If Cmd=on ;forces all choosen LED's to ON (LEDvalue= 0 ->LED's according to keystate)
298   KeyLED:=LEDvalue | (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
299  If Cmd=off ;forces all choosen LED's to OFF (LEDvalue= 0 ->LED's according to keystate)
300    {
301    LEDvalue:=LEDvalue ^ 7
302    KeyLED:=LEDvalue & (GetKeyState("ScrollLock","T") + 2*GetKeyState("NumLock","T") + 4*GetKeyState("CapsLock","T"))
303    }
304  ; EncodeIntegerLED(KeyLED,1,&input,2) ;input bit pattern (KeyLED): bit 0 = scrolllock ;bit 1 = numlock ;bit 2 = capslock
305  input:=Chr(1) Chr(1) Chr(KeyLED)
306  input:=Chr(1)
307  input=
308  success:=DllCall("DeviceIoControl"
309    , "uint", h_device
310    , "uint", CTL_CODE_LED( 0x0000000b     ; FILE_DEVICE_KEYBOARD
311              , 2
312              , 0             ; METHOD_BUFFERED
313              , 0  )          ; FILE_ANY_ACCESS
314    , "uint", &input
315    , "uint", input_size
316    , "uint", 0
317    , "uint", 0
318    , "uint", &output_actual
319    , "uint", 0 )
320}
321
322CTL_CODE_LED(p_device_type,p_function,p_method,p_access ){
323  Return, ( p_device_type << 16 ) | ( p_access << 14 ) | ( p_function << 2 ) | p_method
324}
325
326NtCreateFileLED(ByRef wfilename,desiredaccess,sharemode,createdist,flags,fattribs){
327  VarSetCapacity(fh,4,0)
328  VarSetCapacity(objattrib,24,0)
329  VarSetCapacity(io,8,0)
330  VarSetCapacity(pus,8)
331  uslen:=DllCall("lstrlenW","str",wfilename)*2
332  InsertIntegerLED(uslen,pus,0,2)
333  InsertIntegerLED(uslen,pus,2,2)
334  InsertIntegerLED(&wfilename,pus,4)
335  InsertIntegerLED(24,objattrib,0)
336  InsertIntegerLED(&pus,objattrib,8)
337  status:=DllCall("ntdll\ZwCreateFile","str",fh,"UInt",desiredaccess,"str",objattrib,"str",io,"UInt",0,"UInt",fattribs
338                  ,"UInt",sharemode,"UInt",createdist,"UInt",flags,"UInt",0,"UInt",0, "UInt")
339  return ExtractIntegerLED(fh)
340}
341
342SetUnicodeStrLED(ByRef out, str_){
343  VarSetCapacity(st1, 8, 0)
344  InsertIntegerLED(0x530025, st1)
345  VarSetCapacity(out, (StrLen(str_)+1)*2, 0)
346  DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
347}
348
349ExtractIntegerLED(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4){
350; pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
351; The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
352; pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
353; pSource must be ByRef to avoid corruption during the formal-to-actual copying process
354; (since pSource might contain valid data beyond its first binary zero).
355  Loop %pSize%  ; Build the integer by adding up its bytes.
356    result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
357  if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
358    return result  ; Signed vs. unsigned doesn't matter in these cases.
359  ; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
360  return -(0xFFFFFFFF - result + 1)
361}
362
363InsertIntegerLED(pInteger, ByRef pDest, pOffset = 0, pSize = 4){
364; The caller must ensure that pDest has sufficient capacity.  To preserve any existing contents in pDest,
365; only pSize number of bytes starting at pOffset are altered in it.
366  Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
367    DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
368}
369
370/*
371   ------------------------------------------------------
372   Methoden zum Senden von Unicode-Zeichen
373   ------------------------------------------------------
374
375�ber den GTK-Workaround:
376Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html
377Der 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.
378*/
379
380SendUnicodeChar(charCode){
381  IfWinActive,ahk_class gdkWindowToplevel
382  {
383    StringLower,charCode,charCode
384    send % "^+u" . SubStr(charCode,3) . " "
385  }else{
386    VarSetCapacity(ki,28*2,0)
387    EncodeInteger(&ki+0,1)
388    EncodeInteger(&ki+6,charCode)
389    EncodeInteger(&ki+8,4)
390    EncodeInteger(&ki+28,1)
391    EncodeInteger(&ki+34,charCode)
392    EncodeInteger(&ki+36,4|2)
393    DllCall("SendInput","UInt",2,"UInt",&ki,"Int",28)
394  }
395}
396
397SendUnicodeCharDown(charCode){
398  IfWinActive,ahk_class gdkWindowToplevel
399  {
400    StringLower,charCode,charCode
401    send % "^+u" . SubStr(charCode,3) . " "
402  }else{
403    VarSetCapacity(ki,28,0)
404    EncodeInteger(&ki+0,1)
405    EncodeInteger(&ki+6,charCode)
406    EncodeInteger(&ki+8,4)
407
408    DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
409  }
410}
411
412SendUnicodeCharUp(charCode){
413  IfWinActive,ahk_class gdkWindowToplevel
414  {
415    ; nothing
416  }else{
417    VarSetCapacity(ki,28,0)
418    EncodeInteger(&ki+0,1)
419    EncodeInteger(&ki+6,charCode)
420    EncodeInteger(&ki+8,4|2)
421
422    DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
423  }
424}
425
426EncodeInteger(ref,val){
427  DllCall("ntdll\RtlFillMemoryUlong","Uint",ref,"Uint",4,"Uint",val)
428}
[1072]429
430/**********************
431* Tastenkombinationen *
432***********************
433*/
434
[1126]435~F24::return
[1088]436
[1072]437+pause::
438Suspend, Permit
439  goto togglesuspend
440
441/*****************
442* Men�funktionen *
443******************
444*/
445togglesuspend:
446  if A_IsSuspended {
447    menu, tray, rename, %enable%, %disable%
448    menu, tray, tip, %name%
449    if (iconBenutzen)
[1096]450      menu, tray, icon, %ResourceFolder%\neo_enabled.ico,,1
[1072]451    suspend , off ; Schaltet Suspend aus -> NEO
452  } else {
453    menu, tray, rename, %disable%, %enable%
454    menu, tray, tip, %name% : Deaktiviert
455    if (iconBenutzen)
456      menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1
457    suspend , on  ; Schaltet Suspend ein -> QWERTZ
[1088]458  }
459return
[1072]460
461help:
462  Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm
463return
464
465about:
466  msgbox, 64, %name% � Ergonomische Tastaturbelegung,
467  (
468  %name%
469  `nDas Neo-Layout ersetzt das �bliche deutsche
470  Tastaturlayout mit der Alternative Neo,
471  beschrieben auf http://neo-layout.org/.
472  `nDazu sind keine Administratorrechte n�tig.
473  `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke
474  abgefangen und statt dessen eine �bersetzung weitergeschickt.
475  `nDies geschieht transparent f�r den Anwender,
476  es muss nichts installiert werden.
477  `nDie Zeichen�bersetzung kann leicht �ber das Icon im
478  Systemtray deaktiviert werden.  `n
479  )
480return
481
482neo:
483  run http://neo-layout.org/
484return
485
486autohotkey:
487  run http://autohotkey.com/
488return
489
490open:
491  ListLines ; shows the Autohotkey window
492return
493
494edit:
495  edit
496return
497
498reload:
499  Reload
500return
501
502hide:
503  menu, tray, noicon
504return
505
506exitprogram:
507  exitapp
508return
509
510/**************************
511* lernModus Konfiguration *
512* nur relevant wenn       *
513* lernModus = 1           *
514* Strg+Komma schaltet um  *
515***************************
516*/
517^,::lernModus := not(lernModus)
518
519; 0 = aus, 1 = an
520
521; LShift+RShift == CapsLock (simuliert)
522; Es werden nur die beiden Tastenkombinationen abgefragt,
523; daher kommen LShift und RShift ungehindert bis in die
524; Applikation. Dies ist aber merkw�rdig, da beide Shift-
525; Tasten nun /modifier keys/ werden und, wie in der AHK-
526; Hilfe beschrieben, eigentlich nicht mehr bis zur App
527; durchkommen sollten.
528; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber
529; das schaltet, oh Wunder, die LED nicht wieder aus.
530
[1074]531~*VKA1SC136::
[1133]532  if (isShiftLPressed and !isShiftRPressed and !wasNonShiftKeyPressed)
[1074]533    ToggleMod2Lock()
534  isShiftRPressed := 1
535  isShiftPressed := 1
[1133]536  wasNonShiftKeyPressed := 0
[1124]537  EbeneAktualisieren()
[1074]538return
539
540~*VKA1SC136 up::
541  isShiftRPressed := 0
542  isShiftPressed := isShiftLPressed
[1124]543  EbeneAktualisieren()
[1074]544return
545
546~*VKA0SC02A::
[1133]547  if (isShiftRPressed and !isShiftLPressed and !wasNonShiftKeyPressed)
[1074]548    ToggleMod2Lock()
549  isShiftLPressed := 1
550  isShiftPressed := 1
[1133]551  wasNonShiftKeyPressed := 0
[1124]552  EbeneAktualisieren()
[1074]553return
554
555~*VKA0SC02A up::
556  isShiftLPressed := 0
557  isShiftPressed := isShiftRPressed
[1124]558  EbeneAktualisieren()
[1074]559return
560
561ToggleMod2Lock() {
562  global
563  if (isMod2Locked)
[1072]564  {
[1074]565    isMod2Locked := 0
566    KeyboardLED(4,"off")
[1072]567  }
[1074]568  else
569  {
570    isMod2Locked := 1
571    KeyBoardLED(4,"on")
572  }
573}
574
575
576*VKBFSC02B::
[1137]577  if (isMod3LPressed and !isMod3RPressed and !wasNonShiftKeyPressed)
[1074]578    CharStarDown("MOD3", "MOD3", "SComp")
579  isMod3RPressed := 1
580  isMod3Pressed := 1
[1137]581  wasNonShiftKeyPressed := 0
[1124]582  EbeneAktualisieren()
[1072]583return
584
[1074]585*VKBFSC02B up::
586  if (isMod3LPressed)
587    CharStarUp("MOD3")
588  isMod3RPressed := 0
589  isMod3Pressed := isMod3LPressed
[1124]590  EbeneAktualisieren()
[1072]591return
592
[1074]593*VK14SC03A::
[1137]594  if (isMod3RPressed and !isMod3LPressed and !wasNonShiftKeyPressed)
[1074]595    CharStarDown("MOD3", "MOD3", "SComp")
596  isMod3LPressed := 1
597  isMod3Pressed := 1
[1137]598  wasNonShiftKeyPressed := 0
[1124]599  EbeneAktualisieren()
[1074]600return
601
602*VK14SC03A up::
603  if (isMod3RPressed)
604    CharStarUp("MOD3")
605  isMod3LPressed := 0
606  isMod3Pressed := isMod3RPressed
[1124]607  EbeneAktualisieren()
[1074]608return
609
[1072]610;Mod4+Mod4 == Mod4-Lock
611; Im Gegensatz zu LShift+RShift werden die beiden Tasten
612; _nicht_ zur Applikation weitergeleitet, und nur bei
613; gleichzeitigem Dr�cken wird der Mod4-Lock aktiviert und
614; angezeigt.
615
616*VKA5SC138::
[1074]617  wasMod4RPressed := isMod4RPressed
618  isMod4RPressed := 1
619  isMod4Pressed := 1
[1137]620  waswasNonShiftKeyPressed := wasNonShiftKeyPressed
621  wasNonShiftKeyPressed := 0
[1124]622  EbeneAktualisieren()
[1137]623  if (isMod4LPressed and !wasMod4RPressed and !waswasNonShiftKeyPressed)
[1074]624    ToggleMod4Lock()
625return
626
627*VKA5SC138 up::
628  isMod4RPressed := 0
629  isMod4Pressed := isMod4LPressed
[1124]630  EbeneAktualisieren()
[1074]631return
632
[1072]633*VKE2SC056::
[1074]634  wasMod4LPressed := isMod4LPressed
635  isMod4LPressed := 1
636  isMod4Pressed := 1
[1137]637  waswasNonShiftKeyPressed := wasNonShiftKeyPressed
638  wasNonShiftKeyPressed := 0
[1124]639  EbeneAktualisieren()
[1137]640  if (isMod4RPressed and !wasMod4LPressed and !waswasNonShiftKeyPressed)
[1074]641    ToggleMod4Lock()
642return
643
644*VKE2SC056 up::
645  isMod4LPressed := 0
646  isMod4Pressed := isMod4RPressed
[1124]647  EbeneAktualisieren()
[1074]648return
649
650ToggleMod4Lock() {
651  global
652  if (IsMod4Locked) {
653    IsMod4Locked := 0
654    if (UseMod4Light)
655      KeyboardLED(1,"off")
656    if (zeigeLockBox)
657      MsgBox Mod4-Feststellung aufgehoben!
658  } else {
659    IsMod4Locked := 1
660    if (UseMod4Light)
661      KeyboardLED(1,"on")
662    if (zeigeLockBox)
663      MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen, dr�cke beide Mod4-Tasten gleichzeitig!
[1072]664  }
[1074]665}
666
[949]667/*
668   ------------------------------------------------------
669   BildschirmTastatur
670   ------------------------------------------------------
671*/
672
673F1::
[1074]674  if(isMod4Active() && zeigeBildschirmTastatur)
[949]675    goto Switch1
676  else send {blind}{F1}
677return
678
679F2::
[1074]680  if(isMod4Active() && zeigeBildschirmTastatur)
[949]681    goto Switch2
682  else send {blind}{F2}
683return
684
685F3::
[1074]686  if(isMod4Active() && zeigeBildschirmTastatur)
[949]687    goto Switch3
688  else send {blind}{F3}
689return
690
691F4::
[1074]692  if(isMod4Active() && zeigeBildschirmTastatur)
[949]693    goto Switch4
694  else send {blind}{F4}
695return
696
697F5::
[1074]698  if(isMod4Active() && zeigeBildschirmTastatur)
[949]699    goto Switch5
700  else send {blind}{F5}
701return
702
703F6::
[1074]704  if(isMod4Active() && zeigeBildschirmTastatur)
[949]705    goto Switch6
706  else send {blind}{F6}
707return
708
709F7::
[1074]710  if(isMod4Active() && zeigeBildschirmTastatur)
[949]711    goto Show
712  else send {blind}{F7}
713return
714
715F8::
[1074]716  if(isMod4Active() && zeigeBildschirmTastatur)
[949]717    goto ToggleAlwaysOnTop
718  else send {blind}{F8}
719return
720
721Switch1:
722  tImage := ResourceFolder . "\ebene1.png"
723  goto Switch
724Return
725
726Switch2:
727  tImage := ResourceFolder . "\ebene2.png"
728  goto Switch
729Return
730
731Switch3:
732  tImage := ResourceFolder . "\ebene3.png"
733  goto Switch
734Return
735
736Switch4:
737  tImage := ResourceFolder . "\ebene4.png"
738  goto Switch
739Return
740
741Switch5:
742  tImage := ResourceFolder . "\ebene5.png"
743  goto Switch
744Return
745
746Switch6:
747  tImage := ResourceFolder . "\ebene6.png"
748  goto Switch
749Return
750
[1120]751SwitchDK:
752  tImage := ResourceFolder . "\deadkeys.png"
753  goto Switch
754Return
755
[949]756Switch:
757  if (guiErstellt)
758  {
759     if (Image = tImage)
760        goto Close
761     else
762     {
763       Image := tImage
764       SetTimer, Refresh
765     }
766  }
767  else
768  {
769    Image := tImage
770    goto Show   
771  }
772Return
773
774Show:
775  if (guiErstellt)
776  {
777     goto Close
778  }
779  else
780  {
781    if (Image = "")
782    {
783      Image := ResourceFolder . "\ebene1.png"
784    }     
785    yPosition := A_ScreenHeight -270
786    Gui, Color, FFFFFF
787    Gui, Add, Button, xm+5 gSwitch1, F1
788    Gui, Add, Text, x+5, kleine Buchstaben
789    Gui, Add, Button, xm+5 gSwitch2, F2
790    Gui, Add, Text, x+5, gro�e Buchstaben
791    Gui, Add, Button, xm+5 gSwitch3, F3
792    Gui, Add, Text, x+5, Satz-/Sonderzeichen
793    Gui, Add, Button, xm+5 gSwitch4, F4
794    Gui, Add, Text, x+5, Zahlen / Steuerung
795    Gui, Add, Button, xm+5 gSwitch5, F5
796    Gui, Add, Text, x+5, Sprachen
797    Gui, Add, Button, xm+5 gSwitch6, F6
798    Gui, Add, Text, x+5, Mathesymbole
799    Gui, Add, Button, xm+5 gShow, F7
800    Gui, Add, Text, x+5, An /
801    Gui, Add, Text, y+3, Aus
802    Gui, Add, Button, x+10 y+-30 gShow, F8
803    Gui, Add, Text, x+5, OnTop
[1120]804    Gui, Add, Button, xm+5 gSwitchDK, Deadkeys
[1118]805    Gui, Add, Picture,AltSubmit ys w729 h199 vPicture, %Image%
[949]806    Gui, +AlwaysOnTop
807    Gui, Show, y%yposition% Autosize
808;    SetTimer, Refresh
809    guiErstellt = 1
810  }
811Return
812
813Close:
814  guiErstellt = 0
815  Gui, Destroy
816Return
817
818Refresh:
819   If (Image != OldImage)
820   {
821      GuiControl, , Picture, %Image%
822      OldImage := Image
823   }
824Return
825
826ToggleAlwaysOnTop:
827    if (alwaysOnTop)
828    {
829      Gui, -AlwaysOnTop
830      alwaysOnTop = 0   
831    }
832    else
833    {
834      Gui, +AlwaysOnTop
835      alwaysOnTop = 1
836    }
837Return
Note: See TracBrowser for help on using the browser.