root/windows/autohotkey/neo20.ahk @ 808

Revision 808, 69.9 KB (checked in by dennis, 5 years ago)

Die automatisch erzeugte Datei neo20.ahk wird wieder um die SVN-Keywords (Date, Author, Revision) ergänzt (diesmal richtig).

  • Property svn:keywords set to LastChangedRevision LastChangedDate LastChangedBy HeadURL
Line 
1/*
2*******************************************
3WICHTIGE WARNUNG:
4
5Dies ist inzwischen eine automatisch generierte
6Datei! Sie wird regelm��ig �berschrieben und
7sollte deshalb nicht mehr direkt bearbeitet werden!
8
9Alle weiterf�hrende Informationen finden sich im Abschnitt
10== Hinweise f�r Entwickler ==
11in der Datei README.txt!
12
13Versionshinweise (SVN Keywords) f�r diese Datei:
14$LastChangedRevision$
15$LastChangedDate$
16$LastChangedBy$
17$HeadURL$
18*******************************************
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39*******************************************
40Das war die letzte WARNUNG, ich hoffe nur dass
41Sie wirklich wissen was Sie hier tun wollen ...
42*******************************************
43*/
44/******************
45* Initialisierung *
46*******************
47*/
48DeadKey = ""
49CompKey = ""
50PriorDeadKey = ""
51PriorCompKey = ""
52Ebene12 = 0
53noCaps = 0
54
55EbeneAktualisieren()
56SetBatchLines -1
57SetCapsLockState Off
58SetNumLockState Off
59SetScrollLockState Off
60
61name=Neo 2.0 (%A_ScriptName%)
62enable=Aktiviere %name%
63disable=Deaktiviere %name%
64#usehook on
65#singleinstance force
66#LTrim ; Quelltext kann einger�ckt werden,
67Process,Priority,,High
68SendMode Input 
69
70/****************
71* Verzeichnisse *
72*****************
73*/
74; Setzt den Pfad zu einem tempor�ren Verzeichnis
75EnvGet, WindowsEnvTempFolder, TEMP
76ResourceFolder = %WindowsEnvTempFolder%\NEO2
77FileCreateDir, %ResourceFolder%
78
79; Setzt den Pfad zu den NEO-Anwendungsdateien
80EnvGet, WindowsEnvAppDataFolder, APPDATA
81ApplicationFolder = %WindowsEnvAppDataFolder%\NEO2
82FileCreateDir, %ApplicationFolder%
83ini = %ApplicationFolder%\NEO2.ini
84
85/*******************
86* Globale Schalter *
87********************
88*/
89; Im folgenden gilt (soweit nicht anders angegeben) Ja = 1, Nein = 0:
90
91; 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)
92bildschirmTastaturEinbinden := 1
93
94; Syntaxhinweis: IniRead, Variable, InputFilename, Section, Key [, DefaultValue]
95
96; Sollen Ebenen 1-4 ignoriert werden (kann z.B. vom dll Treiber �bernommen werden)?
97IniRead,ahkTreiberKombi,%ini%,Global,ahkTreiberKombi,0
98
99; Soll der Treiber im Einhandmodus betrieben werden?
100IniRead,einHandNeo,%ini%,Global,einHandNeo,0
101
102; Soll der Lernmodus aktiviert werden?
103IniRead,lernModus,%ini%,Global,lernModus,0
104
105; Soll mit einer MsgBox explizit auf das Ein- und Ausschalten des Mod4-Locks hingewiesen werden?
106IniRead,zeigeLockBox,%ini%,Global,zeigeLockBox,1
107
108; Soll aktivierter Mod4-Lock �ber die Rollen-LED des Keybord angezeigt werden (analog zu CapsLock)?
109IniRead,UseMod4Light,%ini%,Global,UseMod4Light,1
110
111; Soll Lang-s auf s, s auf � und � auf Lang-s gelegt (bzw. vertauscht) werden?
112IniRead,LangSTastatur,%ini%,Global,LangSTastatur,0
113If LangSTastatur
114  KeyboardLED(2,"on")
115
116; Sollen tote Tasten blind angezeigt werden?
117IniRead,DeadCompose,%ini%,Global,DeadCompose,0
118
119;Sollen Compose-Tasten blind angezeigt werden?
120IniRead,DeadSilence,%ini%,Global,DeadSilence,0
121
122
123/***********************
124* Recourcen-Verwaltung *
125************************
126*/
127if(FileExist("ResourceFolder")<>false){
128  ; Versuche, alle m�glicherweise in die EXE eingebundenen Dateien zu extrahieren
129  FileInstall,neo.ico,%ResourceFolder%\neo.ico,1
130  FileInstall,neo_disabled.ico,%ResourceFolder%\neo_disabled.ico,1
131  iconBenutzen=1
132  if (bildschirmTastaturEinbinden=1){
133    FileInstall,ebene1.png,%ResourceFolder%\ebene1.png,1
134    FileInstall,ebene2.png,%ResourceFolder%\ebene2.png,1
135    FileInstall,ebene3.png,%ResourceFolder%\ebene3.png,1
136    FileInstall,ebene4.png,%ResourceFolder%\ebene4.png,1
137    FileInstall,ebene5.png,%ResourceFolder%\ebene5.png,1
138    FileInstall,ebene6.png,%ResourceFolder%\ebene6.png,1
139    zeigeBildschirmTastatur=1
140  }
141}else{
142  MsgBox,"Das Verzeichnis %ResourceFolder% konnte nicht angelegt werden!" ; Diese Zeile dient nur der eventuellen Fehlersuche und sollte eigentlich niemals auftauchen.
143}
144
145; Benutze die Dateien auch dann, wenn sie eventuell im aktuellen Verzeichnis vorhanden sind
146if(FileExist("ebene1.png")&&FileExist("ebene2.png")&&FileExist("ebene3.png")&&FileExist("ebene4.png")&&FileExist("ebene5.png")&&FileExist("ebene6.png"))
147  zeigeBildschirmTastatur=1
148if(FileExist("neo.ico")&&FileExist("neo_disabled.ico"))
149  iconBenutzen=1
150
151/*******************************************
152* �berpr�fung auf deutsches Tastaturlayout *
153********************************************
154*/
155regread,inputlocale,HKEY_CURRENT_USER,Keyboard Layout\Preload,1
156regread,inputlocalealias,HKEY_CURRENT_USER,Keyboard Layout\Substitutes,%inputlocale%
157if (inputlocalealias<>inputlocale=%inputlocalealias% and inputlocale<>00000407) {
158  suspend   
159  regread,inputlocale,HKEY_LOCAL_MACHINE,SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%inputlocale%,Layout Text
160  msgbox, 48, Warnung!,
161    (
162    Nicht kompatibles Tastaturlayout:   
163    `t%inputlocale%   
164    `nDas deutsche QWERTZ muss als Standardlayout eingestellt 
165    sein, damit %name% wie erwartet funktioniert.   
166    `n�ndern Sie die Tastatureinstellung unter
167    `tSystemsteuerung   
168    `t-> Regions- und Sprachoptionen   
169    `t-> Sprachen
170    `t-> Details...   `n
171    )
172  exitapp
173}
174
175/*************************
176* Men� des Systray-Icons *
177**************************
178*/
179if (iconBenutzen)
180  menu,tray,icon,%ResourceFolder%\neo.ico,,1
181menu,tray,nostandard
182menu,tray,add,�ffnen,open
183  menu,helpmenu,add,About,about
184  menu,helpmenu,add,Autohotkey-Hilfe,help
185  menu,helpmenu,add
186  menu,helpmenu,add,http://autohotkey.com/,autohotkey
187  menu,helpmenu,add,http://www.neo-layout.org/,neo
188menu,tray,add,Hilfe,:helpmenu
189menu,tray,add
190menu,tray,add,%disable%,togglesuspend
191menu,tray,add
192menu,tray,add,Bearbeiten,edit
193menu,tray,add,Neu Laden,reload
194menu,tray,add
195menu,tray,add,Nicht im Systray anzeigen,hide
196menu,tray,add,%name% beenden, exitprogram
197menu,tray,default,%disable%
198menu,tray,tip,%name%
199
200/**********************
201* Tastenkombinationen *
202***********************
203*/
204;Blinde/Sichtbare Tote Tasten
205*F9::
206  if isMod4pressed()
207    DeadSilence := !(DeadSilence)
208  else send {blind}{F9}
209return
210
211;Blinde/Sichtbare Compose
212*F10::
213  if isMod4pressed()
214    DeadCompose := !(DeadCompose)
215  else send {blind}{F10}
216return
217
218;Lang-s-Tastatur:
219*F11::
220  if isMod4pressed() {
221    LangSTastatur := !(LangSTastatur)
222    if LangSTastatur
223      KeyboardLED(2,"on")
224    else KeyboardLED(2,"off")
225  } else send {blind}{F11}
226return
227
228;Alle Modi und Locks in den Normalzustand versetzen
229;bzw. Skript neu laden:
230*Esc::
231  if isMod4pressed()
232    reload
233  else send {blind}{Esc}
234return
235
236*pause::
237Suspend, Permit
238  if isShiftpressed()
239    goto togglesuspend
240  else send {blind}{pause}
241return
242
243/*****************
244* Men�funktionen *
245******************
246*/
247togglesuspend:
248  if A_IsSuspended {
249    menu, tray, rename, %enable%, %disable%
250    menu, tray, tip, %name%
251    if (iconBenutzen)
252      menu, tray, icon, %ResourceFolder%\neo.ico,,1
253    suspend , off ; Schaltet Suspend aus -> NEO
254  } else {
255    menu, tray, rename, %disable%, %enable%
256    menu, tray, tip, %name% : Deaktiviert
257    if (iconBenutzen)
258      menu, tray, icon, %ResourceFolder%\neo_disabled.ico,,1
259    suspend , on  ; Schaltet Suspend ein -> QWERTZ
260  } return
261
262help:
263  Run, %A_WinDir%\hh mk:@MSITStore:autohotkey.chm
264return
265
266about:
267  msgbox, 64, %name% � Ergonomische Tastaturbelegung,
268  (
269  %name%
270  `nDas Neo-Layout ersetzt das �bliche deutsche
271  Tastaturlayout mit der Alternative Neo,
272  beschrieben auf http://neo-layout.org/.
273  `nDazu sind keine Administratorrechte n�tig.
274  `nWenn Autohotkey aktiviert ist, werden alle Tastendrucke
275  abgefangen und statt dessen eine �bersetzung weitergeschickt.
276  `nDies geschieht transparent f�r den Anwender,
277  es muss nichts installiert werden.
278  `nDie Zeichen�bersetzung kann leicht �ber das Icon im
279  Systemtray deaktiviert werden.  `n
280  )
281return
282
283neo:
284  run http://neo-layout.org/
285return
286
287autohotkey:
288  run http://autohotkey.com/
289return
290
291open:
292  ListLines ; shows the Autohotkey window
293return
294
295edit:
296  edit
297return
298
299reload:
300  Reload
301return
302
303hide:
304  menu, tray, noicon
305return
306
307exitprogram:
308  exitapp
309return
310
311/**************************
312* lernModus Konfiguration *
313* nur relevant wenn       *
314* lernModus = 1           *
315* Strg+Komma schaltet um  *
316***************************
317*/
318^,::lernModus := not(lernModus)
319
320; 0 = aus, 1 = an
321
322; die Nachfolgenden sind n�tzlich um sich die Qwertz-Tasten abzugew�hnen, da alle auf der 4. Ebene vorhanden.
323lernModus_std_Return = 0
324lernModus_std_Backspace = 0
325lernModus_std_PgUp = 0
326lernModus_std_PgDn = 0
327lernModus_std_Einf = 0
328lernModus_std_Entf = 0
329lernModus_std_Pos0 = 0
330lernModus_std_Ende = 0
331lernModus_std_Hoch = 0
332lernModus_std_Runter = 0
333lernModus_std_Links = 0
334lernModus_std_Rechts = 0
335lernModus_std_ZahlenReihe = 0
336
337; im folgenden kann man auch noch ein paar Tasten der 4. Ebene deaktivieren
338; n�tzlich um sich zu zwingen, richtig zu schreiben
339lernModus_neo_Backspace = 0
340lernModus_neo_Entf = 1
341
342/****************************
343* EinHandNeo                *
344* Umschalten mit Strg+Punkt *
345*****************************
346*/
347^.::einHandNeo := not(einHandNeo)
348
349spacepressed := 0
350keypressed:= 0
351
352; Reihe 1
353gespiegelt_7 = neo_6
354gespiegelt_8 = neo_5
355gespiegelt_9 = neo_4
356gespiegelt_0 = neo_3
357gespiegelt_strich = neo_2
358gespiegelt_tot2 = neo_1
359
360; Reihe 2
361gespiegelt_k = neo_w
362gespiegelt_h = neo_c
363gespiegelt_g = neo_l
364gespiegelt_f = neo_v
365gespiegelt_q = neo_x
366gespiegelt_sz = neo_tab
367gespiegelt_tot3 = neo_tot1
368
369; Reihe 3
370gespiegelt_s = neo_o
371gespiegelt_n = neo_e
372gespiegelt_r = neo_a
373gespiegelt_t = neo_i
374gespiegelt_d = neo_u
375
376; Reihe 4
377gespiegelt_b = neo_z
378gespiegelt_m = neo_p
379gespiegelt_komma = neo_�
380gespiegelt_punkt = neo_�
381gespiegelt_j = neo_�
382; LShift+RShift == CapsLock (simuliert)
383; Es werden nur die beiden Tastenkombinationen abgefragt,
384; daher kommen LShift und RShift ungehindert bis in die
385; Applikation. Dies ist aber merkw�rdig, da beide Shift-
386; Tasten nun /modifier keys/ werden und, wie in der AHK-
387; Hilfe beschrieben, eigentlich nicht mehr bis zur App
388; durchkommen sollten.
389; KeyboardLED(4,"switch") hatte ich zuerst genommen, aber
390; das schaltet, oh Wunder, die LED nicht wieder aus.
391
392isMod2Locked = 0
393VKA1SC136 & VKA0SC02A:: ; RShift, dann LShift
394VKA0SC02A & VKA1SC136:: ; LShift, dann RShift
395  if (GetKeyState("VKA1SC136", "P") and GetKeyState("VKA0SC02A", "P"))
396  {
397    if isMod2Locked
398    {
399      isMod2Locked = 0
400      KeyboardLED(4,"off")
401    }
402    else
403    {
404      isMod2Locked = 1
405      KeyBoardLED(4,"on")
406    }
407  }
408return
409
410;Mod3-Tasten (Wichtig, sie werden sonst nicht verarbeitet!)
411*VKBFSC02B:: ; #
412*VK14SC03A:: ; CapsLock
413return
414
415;Mod4+Mod4 == Mod4-Lock
416; Im Gegensatz zu LShift+RShift werden die beiden Tasten
417; _nicht_ zur Applikation weitergeleitet, und nur bei
418; gleichzeitigem Dr�cken wird der Mod4-Lock aktiviert und
419; angezeigt.
420
421IsMod4Locked := 0
422*VKA5SC138::
423*VKE2SC056::
424  if (GetKeyState("VKA5SC138", "P") and GetKeyState("VKE2SC056", "P"))
425  {
426    if IsMod4Locked
427    {
428      if zeigeLockBox
429        MsgBox Mod4-Feststellung aufgebehoben!
430       IsMod4Locked = 0
431      if UseMod4Light
432        KeyboardLED(1,"off")
433    }
434    else
435    {
436      if zeigeLockBox
437        MsgBox Mod4 festgestellt: Um Mod4 wieder zu l�sen, dr�cke beide Mod4-Tasten gleichzeitig!
438      IsMod4Locked = 1
439      if UseMod4Light
440        KeyboardLED(1,"on")
441    }
442  }
443return
444
445EbeneAktualisieren()
446{
447  global
448  PriorDeadKey := DeadKey
449  PriorCompKey := CompKey
450  DeadKey := ""
451  CompKey := ""
452  Modstate := IsMod4Pressed() . IsMod3Pressed() . IsShiftPressed()
453  Ebene7 := 0
454  Ebene8 := 0
455  if ahkTreiberKombi
456    if ( Modstate = "001")
457      Ebene = 6
458    else
459      Ebene = -1
460  else
461    if      (Modstate = "000") ; Ebene 1: Ohne Mod
462      Ebene = 1
463    else if (Modstate = "001") ; Ebene 2: Shift
464      Ebene = 2
465    else if (Modstate = "010") ; Ebene 3: Mod3
466      Ebene = 3
467    else if (Modstate = "100") ; Ebene 4: Mod4
468      Ebene = 4
469    else if (Modstate = "011") ; Ebene 5: Shift+Mod3
470      Ebene = 5
471    else if (Modstate = "110") ; Ebene 6: Mod3+Mod4
472      Ebene = 6
473    else if (Modstate = "101") ; Ebene 7: Shift+Mod4 impliziert Ebene 4
474    {
475      Ebene = 4
476      Ebene7 = 1
477    }
478    else if (Modstate = "111") ; Ebene 8: Shift+Mod3+Mod4 impliziert Ebene 6
479    {
480      Ebene = 6
481      Ebene8 = 1
482    }
483  Ebene12 := ((Ebene = 1) or (Ebene = 2))
484  Ebene14 := ((Ebene = 1) or (Ebene = 4))
485  NumLock := GetKeyState("NumLock","T")
486}
487
488IsShiftPressed()
489{
490  global
491  if GetKeyState("Shift","P")
492    if isMod2Locked and !noCaps
493      return 0
494    else
495      return 1
496  else
497    if isMod2Locked and !noCaps
498      return 1
499    else
500      return 0
501  noCaps = 0
502}
503
504IsMod3Pressed()
505{
506   global
507   return ((GetKeyState("CapsLock","P")) or (GetKeyState("#","P")))
508}
509
510IsMod4Pressed()
511{
512   global
513   if( not(einHandNeo) or not(spacepressed))
514     if IsMod4Locked
515         return (not ( GetKeyState("<","P") or GetKeyState("SC138","P")))
516     else
517         return ( GetKeyState("<","P") or GetKeyState("SC138","P"))
518   else
519     if IsMod4Lock
520       return (not ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P")))
521     else
522       return ( GetKeyState("<","P") or GetKeyState("SC138","P") or GetKeyState("�","P"))
523}
524/*
525   ------------------------------------------------------
526   QWERTZ->Neo umwandlung
527   ------------------------------------------------------
528*/
529
530; Reihe 1
531*VKDCSC029::goto neo_tot1 ; Zirkumflex
532*VK31SC002::goto neo_1
533*VK32SC003::goto neo_2
534*VK33SC004::goto neo_3
535*VK34SC005::goto neo_4
536*VK35SC006::goto neo_5
537*VK36SC007::goto neo_6
538*VK37SC008::
539  if (!(einHandNeo) or !(spacepressed))
540    goto neo_7
541  else {
542    keypressed := 1
543    goto %gespiegelt_7%
544  }
545*VK38SC009::
546  if(!(einHandNeo) or !(spacepressed))
547    goto neo_8
548  else {
549    keypressed := 1
550    goto %gespiegelt_8%
551  }
552*VK39SC00A::
553  if(!(einHandNeo) or !(spacepressed))
554    goto neo_9
555  else {
556    keypressed := 1
557    goto %gespiegelt_9%
558  }
559*VK30SC00B::
560  if(!(einHandNeo) or !(spacepressed))
561    goto neo_0
562  else {
563    keypressed := 1
564    goto %gespiegelt_0%
565  }
566*VKDBSC00C:: ; �
567  if !ahkTreiberKombi {
568    if(!(einHandNeo) or !(spacepressed))
569      goto neo_strich
570    else {
571      keypressed := 1
572      goto %gespiegelt_strich%
573    }
574  } else goto neo_sz   
575*VKDDSC00D::goto neo_tot2 ; Akut
576
577; Reihe 2
578
579VK09SC00F::goto neo_tab
580*VK51SC010:: ; q (x)
581  if !ahkTreiberKombi
582    goto neo_x
583  else goto neo_q   
584*VK57SC011:: ; w (v)
585  if !ahkTreiberKombi
586    goto neo_v
587  else goto neo_w   
588*VK45SC012:: ; e (l)
589  if !ahkTreiberKombi
590    goto neo_l
591  else goto neo_e   
592*VK52SC013:: ; r (c)
593  if !ahkTreiberKombi
594    goto neo_c
595  else goto neo_r   
596*VK54SC014:: ; t (w)
597  if !ahkTreiberKombi
598    goto neo_w
599  else goto neo_t   
600*VK5ASC015:: ; z (k)
601  if !ahkTreiberKombi {
602    if(!(einHandNeo) or !(spacepressed))
603      goto neo_k
604    else {
605      keypressed := 1
606      goto %gespiegelt_k%
607    }
608  }
609  else goto neo_z   
610*VK55SC016:: ; u (h)
611  if !ahkTreiberKombi {
612    if(!(einHandNeo) or !(spacepressed))
613      goto neo_h
614    else {
615      keypressed := 1
616      goto %gespiegelt_h%
617    }
618  } else goto neo_u   
619*VK49SC017:: ; i (g)
620  if !ahkTreiberKombi {
621    if(!(einHandNeo) or !(spacepressed))
622      goto neo_g
623    else {
624      keypressed := 1
625      goto %gespiegelt_g%
626    }
627  }
628  else goto neo_i   
629*VK4FSC018:: ; o (f)
630  if !ahkTreiberKombi {
631    if(!(einHandNeo) or !(spacepressed))
632      goto neo_f
633    else {
634      keypressed := 1
635      goto %gespiegelt_f%
636    }
637  }
638  else goto neo_o   
639*VK50SC019:: ; p (q)
640  if !ahkTreiberKombi {
641    if(!(einHandNeo) or !(spacepressed))
642      goto neo_q
643    else {
644      keypressed := 1
645      goto %gespiegelt_q%
646    }
647  }
648  else goto neo_p   
649*VKBASC01A:: ; � (�)
650  if !ahkTreiberKombi {
651    if(!(einHandNeo) or !(spacepressed))
652      goto neo_sz
653    else {
654      keypressed := 1
655      goto %gespiegelt_sz%
656    }
657  } else goto neo_�   
658*VKBBSC01B:: ; + (tot3)
659  if !ahkTreiberKombi {
660    if(!(einHandNeo) or !(spacepressed))
661      goto neo_tot3
662    else {
663      keypressed := 1
664      goto %gespiegelt_tot3%
665    }
666  }
667
668; Reihe 3
669*VK41SC01E:: ; a (u)
670  if !ahkTreiberKombi
671    goto neo_u
672  else goto neo_a   
673*VK53SC01F:: ; s (i)
674  if !ahkTreiberKombi
675    goto neo_i
676  else goto neo_s   
677*VK44SC020:: ; d (a)
678  if !ahkTreiberKombi
679    goto neo_a
680  else goto neo_d   
681*VK46SC021:: ; f (e)
682  if !ahkTreiberKombi
683    goto neo_e
684  else goto neo_f   
685*VK47SC022:: ; g (o)
686  if !ahkTreiberKombi
687    goto neo_o
688  else goto neo_g   
689*VK48SC023:: ; h (s)
690  if !ahkTreiberKombi {
691    if(!(einHandNeo) or !(spacepressed))
692      goto neo_s
693    else {
694      keypressed := 1
695      goto %gespiegelt_s%
696    }
697  } else goto neo_h   
698*VK4ASC024:: ; j (n)
699  if !ahkTreiberKombi {
700    if(!(einHandNeo) or !(spacepressed))
701      goto neo_n
702    else {
703      keypressed := 1
704      goto %gespiegelt_n%
705    }
706  } else goto neo_j   
707*VK4BSC025:: ; k (r)
708  if !ahkTreiberKombi {
709    if(!(einHandNeo) or !(spacepressed))
710      goto neo_r
711    else {
712      keypressed := 1
713      goto %gespiegelt_r%
714    }
715  } else goto neo_k   
716*VK4CSC026:: ; l (t)
717  if !ahkTreiberKombi {
718    if(!(einHandNeo) or !(spacepressed))
719      goto neo_t
720    else {
721      keypressed := 1
722      goto %gespiegelt_t%
723    }
724  } else goto neo_l   
725*VKC0SC027:: ; � (d)
726  if !ahkTreiberKombi {
727    if(!(einHandNeo) or !(spacepressed))
728      goto neo_d
729    else {
730      keypressed := 1
731      goto %gespiegelt_d%
732    }
733  } else goto neo_�   
734*VKDESC028:: ; � (y)
735  if !ahkTreiberKombi
736    goto neo_y
737  else goto neo_�
738
739; Reihe 4
740*VK59SC02C:: ; y (�)
741  if !ahkTreiberKombi
742    goto neo_�
743  else goto neo_y   
744*VK58SC02D:: ; x (�)
745  if !ahkTreiberKombi
746    goto neo_�
747  else goto neo_x   
748*VK43SC02E:: ; c (�)
749  if !ahkTreiberKombi
750    goto neo_�
751  else goto neo_c
752*VK56SC02F:: ; v (p)
753  if !ahkTreiberKombi
754    goto neo_p
755  else goto neo_v
756*VK42SC030:: ; b (z)
757  if !ahkTreiberKombi
758    goto neo_z
759  else goto neo_b
760*VK4ESC031:: ; n (b)
761  if !ahkTreiberKombi {
762    if(!(einHandNeo) or !(spacepressed))
763      goto neo_b
764    else {
765      keypressed := 1
766      goto %gespiegelt_b%
767    }
768  } else goto neo_n
769*VK4DSC032:: ; m (m)
770     if(!(einHandNeo) or !(spacepressed))
771       goto neo_m
772     else {
773       keypressed := 1
774       goto %gespiegelt_m%
775      }
776*VKBCSC033:: ; , (,)
777     if(!(einHandNeo) or !(spacepressed))
778       goto neo_komma
779     else {
780       keypressed := 1
781       goto %gespiegelt_komma%
782     }
783*VKBESC034:: ; . (.)
784     if(!(einHandNeo) or !(spacepressed))
785       goto neo_punkt
786     else {
787       keypressed := 1
788       goto %gespiegelt_punkt%
789     }
790*VKBDSC035:: ; - (j)
791  if !ahkTreiberKombi {
792     if(!(einHandNeo) or !(spacepressed))
793       goto neo_j
794     else {
795       keypressed := 1
796       goto %gespiegelt_j%
797     }
798  } else goto neo_strich
799
800; Numpad
801*VK90SC145::goto neo_NumLock
802*VK6FSC135::goto neo_NumpadDiv
803*VK6ASC037::goto neo_NumpadMult
804*VK6DSC04A::goto neo_NumpadSub
805*VK6BSC04E::goto neo_NumpadAdd
806*VK0DSC11C::goto neo_NumpadEnter
807*VK67SC047::                   ; NumPad7
808*VK24SC047::goto neo_Numpad7   ; NumPadHome
809*VK68SC048::                   ; NumPad8
810*VK26SC048::goto neo_Numpad8   ; NumPadUp
811*VK69SC049::                   ; NumPad9
812*VK21SC049::goto neo_Numpad9   ; NumPadPgUp
813*VK64SC04B::                   ; NumPad4
814*VK25SC04B::goto neo_Numpad4   ; NumPadLeft
815*VK65SC04C::                   ; NumPad5
816*VK0CSC04C::goto neo_Numpad5   ; NumPadClear
817*VK66SC04D::                   ; NumPad6
818*VK27SC04D::goto neo_Numpad6   ; NumPadRight
819*VK61SC04F::                   ; NumPad1
820*VK23SC04F::goto neo_Numpad1   ; NumPadEnd
821*VK62SC050::                   ; NumPad2
822*VK28SC050::goto neo_Numpad2   ; NumPadDown
823*VK63SC051::                   ; NumPad3
824*VK22SC051::goto neo_Numpad3   ; NumPadPgDn
825*VK60SC052::                   ; NumPad0
826*VK2DSC052::goto neo_Numpad0   ; NumPadIns
827*VK6ESC053::                   ; NumPadDot
828*VK2ESC053::goto neo_NumpadDot ; NumPadIns
829/*
830  Die eigentliche NEO-Belegung und der Hauptteil des AHK-Treibers.
831
832  Reihe 1
833*/
834
835neo_tot1:
836  noCaps=1
837  EbeneAktualisieren()
838  if (Ebene=1) {
839     deadUni(0x02C6) ; Zirkumflex, tot
840     DeadKey = c1
841  } else if (Ebene = 2) {
842     deadUni(0x02C7) ; Caron, tot
843     DeadKey = c2
844  } else if (Ebene = 3) {
845    deadUni(0x02D8) ; Brevis, tot
846    DeadKey = c3
847  } else if Ebene7
848    SendUnicodeChar(0x0302) ; Verbindungszeichen Zirkumflex
849  else if Ebene8
850    SendUnicodeChar(0x0306) ; Verbindungszeichen Brevis
851  else if (Ebene = 4) {
852    deadUni(0x00B7) ; Mittenpunkt, tot
853    DeadKey = c4
854  } else if (Ebene = 5) {
855    deadUni(0x002D) ; Querstrich, tot
856    DeadKey = c5
857  } else if (Ebene = 6) {
858    deadUni(0x0323) ; Punkt drunter (Colon), tot
859    DeadKey = c6
860  } CompKey := PriorCompKey
861return
862
863neo_1:
864  noCaps=1
865  EbeneAktualisieren()
866  if Ebene12 {
867    if !(CheckDeadUni("c1",0x00B9) ; Hochgestellte 1
868      or CheckDeadUni("c5",0x2081) ; Tiefgestellte 1
869      or CheckComp3Uni("r_1",0x217A) ; R�misch xi
870      or CheckComp3Uni("R_1",0x216A)) ; R�misch XI
871      outputChar(1,"�")
872    if !(checkComp(1))
873    if (PriorCompKey == "r")
874      CompKey := "r_1"
875    else if (PriorCompkey == "R")
876      CompKey := "R_1"
877  } else if (Ebene = 3)
878    SendUnicodeChar(0x00B9) ; Hochgestellte 1
879  else if (Ebene = 4)
880    SendUnicodeChar(0x2022) ; Bullet
881  else if (Ebene = 5)
882    SendUnicodeChar(0x2640) ; Piktogramm weiblich
883  else if (Ebene = 6)
884    SendUnicodeChar(0x00AC) ; Nicht-Symbol
885return
886
887neo_2:
888  noCaps = 1
889  EbeneAktualisieren()
890  if (Ebene = 1) {
891    if !(CheckDeadUni("c1",0x00B2) ; Hochgestellte 2
892      or CheckDeadUni("c5",0x2082) ; Tiefgestellte 2
893      or CheckCompUni("r",0x2171) ; R�misch ii
894      or CheckCompUni("R",0x2161) ; R�misch II
895      or CheckComp3Uni("r_1",0x217B) ; R�misch xii
896      or CheckComp3Uni("R_1",0x216B)) ; R�misch XII
897      outputChar(2,"")
898    checkComp(2)
899  } else if (Ebene = 2)
900    SendUnicodeChar(0x2116) ; Numero
901  else if (Ebene = 3)
902    SendUnicodeChar(0x00B2) ; Hochgestellte 2
903  else if (Ebene = 4)
904    SendUnicodeChar(0x2023) ; Aufz�hlungspfeil
905  else if (Ebene = 5)
906    SendUnicodeChar(0x26A5) ; Piktogramm Zwitter
907  else if (Ebene = 6)
908    SendUnicodeChar(0x2228) ; Logisches Oder
909return
910
911neo_3:
912  noCaps = 1
913  EbeneAktualisieren()
914  if Ebene12 {
915    if !(CheckDeadUni("c1",0x00B3) ; Hochgestellte 3
916      or CheckDeadUni("c5",0x2083) ; Tiefgestellte 3
917      or CheckCompUni("1",0x2153) ; 1/3
918      or CheckCompUni("2",0x2154) ; 2/3
919      or CheckCompUni("r",0x2172) ; R�misch iii
920      or CheckCompUni("R",0x2162)) ; R�misch III
921      outputChar(3,"�")
922    checkComp(3)
923  } else if (Ebene = 3)
924    SendUnicodeChar(0x00B3) ; Hochgestellte 3
925  else if (Ebene = 5)
926    SendUnicodeChar(0x2642) ; Piktogramm Mann
927  else if (Ebene = 6)
928    SendUnicodeChar(0x2227) ; Logisches Und
929return
930
931neo_4:
932  noCaps = 1
933  EbeneAktualisieren()
934  if (Ebene = 1) {
935    if !(CheckDeadUni("c1",0x2074) ; Hochgestellte 4
936      or CheckDeadUni("c5",0x2084) ; Tiefgestellte 4
937      or CheckCompUni("r",0x2173) ; R�misch iv
938      or CheckCompUni("R",0x2163)) ; R�misch IV
939      outputChar(4,"")
940    checkComp(4)
941  } else if (Ebene = 2)
942    SendUnicodeChar(0x00BB) ; Double guillemot right
943  else if (Ebene = 3)
944    Send {blind}� ; Single guillemot right
945  else if (Ebene = 4)
946    Send {blind}{PgUp}
947  else if (Ebene = 5)
948    SendUnicodeChar(0x2113) ; Script small L
949  else if (Ebene = 6)
950    SendUnicodeChar(0x22A5) ; Senkrecht
951return
952
953neo_5:
954  noCaps = 1
955  EbeneAktualisieren()
956  if (Ebene = 1) {
957    if !(CheckDeadUni("c1",0x2075) ; Hochgestellte 5
958      or CheckDeadUni("c5",0x2085) ; Tiefgestellte 5
959      or CheckCompUni("1",0x2155) ; 1/5
960      or CheckCompUni("2",0x2156) ; 2/5
961      or CheckCompUni("3",0x2157) ; 3/5
962      or CheckCompUni("4",0x2158) ; 4/5
963      or CheckCompUni("r",0x2174) ; R�misch v
964      or CheckCompUni("R",0x2164)) ; R�misch V
965      outputChar(5,"")
966    checkComp(5)
967  } else if (Ebene = 2)
968    SendUnicodeChar(0x00AB) ; Double guillemot left
969  else if (Ebene = 3)
970    Send {blind}� ; Single guillemot left
971  else if (Ebene = 5)
972    SendUnicodeChar(0x2020) ; Kreuz (Dagger)
973  else if (Ebene = 6)
974    SendUnicodeChar(0x2221) ; Winkel
975return
976
977neo_6:
978  noCaps = 1
979  EbeneAktualisieren()
980  if (Ebene = 1) {
981    if !(CheckDeadUni("c1",0x2076) ; Hochgestellte 6
982      or CheckDeadUni("c5",0x2086) ; Tiefgestellte 6
983      or CheckCompUni("1",0x2159) ; 1/6
984      or CheckCompUni("5",0x215A) ; 5/6
985      or CheckCompUni("r",0x2175) ; R�misch vi
986      or CheckCompUni("R",0x2165)) ; R�misch VI
987      outputChar(6,"")
988    checkComp(6)
989  } else if (Ebene = 2)
990    SendUnicodeChar(0x20AC)
991  else if (Ebene = 3)
992    send {blind}�
993  else if (Ebene = 4)
994    send {blind}�
995  else if (Ebene = 6)
996    SendUnicodeChar(0x2225) ; parallel
997return
998
999neo_7:
1000  noCaps = 1
1001  EbeneAktualisieren()
1002  if Ebene12 {
1003    if !(CheckDeadUni("c1",0x2077) ; Hochgestellte 7
1004      or CheckDeadUni("c5",0x2087) ; Tiefgestellte 7
1005      or CheckCompUni("r",0x2176) ; R�misch vii
1006      or CheckCompUni("R",0x2166)) ; R�misch VII
1007      outputChar(7,"$")
1008    checkComp(7)
1009  } else if (Ebene = 3)
1010    send {blind}�
1011  else if (Ebene = 4)
1012    send {blind}�
1013  else if (Ebene = 5)
1014    SendUnicodeChar(0x03BA) ; greek small letter kappa
1015  else if (Ebene = 6)
1016    SendUnicodeChar(0x2209) ; nicht Element von
1017return
1018
1019neo_8:
1020  noCaps = 1
1021  EbeneAktualisieren()
1022  if Ebene12 {
1023    if !(CheckDeadUni("c1",0x2078) ; Hochgestellte 8
1024      or CheckDeadUni("c5",0x2088) ; Tiefgestellte 8
1025      or CheckCompUni("1",0x215B) ; 1/8
1026      or CheckCompUni("3",0x215C) ; 3/8
1027      or CheckCompUni("5",0x215D) ; 5/8
1028      or CheckCompUni("7",0x215E) ; 7/8
1029      or CheckCompUni("r",0x2177) ; R�misch viii
1030      or CheckCompUni("R",0x2167)) ; R�misch VIII
1031      outputChar(8,"�")
1032    checkComp(8)
1033  } else if (Ebene = 3)
1034    send {blind}�
1035  else if (Ebene = 4)
1036    Send {blind}{NumpadDiv}
1037  else if (Ebene = 5)
1038    SendUnicodeChar(0x27E8) ; bra (�ffnende spitze Klammer)
1039  else if (Ebene = 6)
1040    SendUnicodeChar(0x2204) ; es existiert nicht
1041return
1042
1043neo_9:
1044  noCaps = 1
1045  EbeneAktualisieren()
1046  if Ebene12 {
1047    if !(CheckDeadUni("c1",0x2079) ; Hochgestellte 9
1048      or CheckDeadUni("c5",0x2089) ; Tiefgestellte 9
1049      or CheckCompUni("r",0x2178) ; R�misch ix
1050      or CheckCompUni("R",0x2168)) ; R�misch IX
1051      outputChar(9,"�")
1052    checkComp(9)
1053  } else if (Ebene = 3)
1054    send {blind}�
1055  else if (Ebene = 4)
1056    Send {blind}{NumpadMult}
1057  else if (Ebene = 5)
1058    SendUnicodeChar(0x27E9) ; ket (schlie�ende spitze Klammer)
1059  else if (Ebene = 6)
1060    SendUnicodeChar(0x2226) ; nicht parallel
1061return
1062
1063neo_0:
1064  noCaps = 1
1065  EbeneAktualisieren()
1066  if Ebene12 {
1067    if !(CheckDeadUni("c1",0x2070) ; Hochgestellte 0
1068      or CheckDeadUni("c5",0x2080) ; Tiefgestellte 0
1069      or CheckDeadUni("r_1",0x2177) ; R�misch x
1070      or CheckComp3Uni("R_1",0x2169)) ; R�misch X
1071      outputChar(0,"�")
1072      checkComp(0)
1073   } else if (Ebene = 3)
1074      send {blind}�
1075   else if (Ebene = 4)
1076      Send {blind}{NumpadSub}
1077   else if (Ebene = 6)
1078      SendUnicodeChar(0x2205) ; leere Menge
1079return
1080
1081neo_strich:
1082  noCaps = 1
1083  EbeneAktualisieren()
1084  if (Ebene = 1)
1085    outputChar("-","") ; Bindestrich-Minus
1086  else if (Ebene = 2)
1087    SendUnicodeChar(0x2013) ; Gedankenstrich
1088  else if (Ebene = 3)
1089    SendUnicodeChar(0x2014) ; Englischer Gedankenstrich (Geviertstrich)
1090  else if (Ebene = 5)
1091    SendUnicodeChar(0x2011) ; gesch�tzter Bindestrich (Bindestrich ohne Zeilenumbruch)
1092  else if (Ebene = 6)
1093    SendUnicodeChar(0x00AD) ; weicher Bindestrich
1094return
1095
1096neo_tot2:
1097  noCaps = 1
1098  EbeneAktualisieren()
1099  if (Ebene = 1) {
1100    deadAsc("{�}{space}") ; Akut, tot
1101    DeadKey := "a1"
1102  } else if (Ebene = 2) {
1103    deadAsc("``{space}") ; Gravis, tot
1104    DeadKey := "a2"
1105  } else if (Ebene = 3) {
1106    deadAsc("�") ; Cedilla, tot
1107    DeadKey := "a3"
1108  } else if (Ebene = 4) {
1109    deadUni(0x02D9) ; Punkt oben
1110    DeadKey := "a4"
1111  } else if (Ebene = 5) {
1112    deadUni(0x02DB) ; Ogonek
1113    DeadKey := "a5"
1114  } else if (Ebene = 6) {
1115    deadUni(0x02DA) ; Ring oben
1116    DeadKey := "a6"
1117  } CompKey := PriorCompKey
1118return
1119
1120
1121/*
1122
1123  Reihe 2
1124
1125*/
1126
1127neo_x:
1128  EbeneAktualisieren()
1129  if (Ebene12)
1130    OutputChar("x","X")
1131  else if (Ebene = 3)
1132    SendUnicodeChar(0x2026) ; Ellipse horizontal
1133  else if (Ebene = 4)
1134    SendUnicodeChar(0x22EE) ; Ellipse vertikal
1135  else if (Ebene = 5)
1136    SendUnicodeChar(0x03BE) ; xi
1137  else if (Ebene = 6)
1138    SendUnicodeChar(0x039E) ; Xi
1139return
1140
1141
1142neo_v:
1143  EbeneAktualisieren()
1144  if (Ebene12 and !(CheckDeadUni12("c6",0x1E7F,0x1E7E)))
1145    OutputChar("v","V")
1146  else if (Ebene = 3)
1147    send {blind}_
1148  else if (Ebene = 4) and (!lernModus or lernModus_neo_Backspace)
1149      Send {blind}{Backspace}
1150  else if (Ebene = 6)
1151    SendUnicodeChar(0x2259) ; estimates
1152return
1153
1154
1155
1156neo_l:
1157  EbeneAktualisieren()
1158  if (Ebene12 and !(CheckDeadUni12("a1",0x013A,0x0139)
1159                 or CheckDeadUni12("a3",0x013C,0x013B)
1160                 or CheckDeadUni12("c2",0x013E,0x013D)
1161                 or CheckDeadUni12("c4",0x0140,0x013F)
1162                 or CheckDeadUni12("c6",0x1E37,0x1E36)
1163                 or CheckDeadUni12("t4",0x0142,0x0141)
1164                 or CheckCompUni("f",0xFB02)
1165                 or CheckCompUni("F",0xFB04)))
1166    OutputChar("l","L")
1167  else if (Ebene = 3)
1168    send {blind}[
1169  else if (Ebene = 4)
1170    Send {Blind}{Up}
1171  else if (Ebene = 5)
1172    SendUnicodeChar(0x03BB) ; lambda
1173  else if (Ebene = 6)
1174    SendUnicodeChar(0x039B) ; Lambda
1175return
1176
1177
1178neo_c:
1179  EbeneAktualisieren()
1180  if (Ebene12 and !(CheckDeadUni12("a1",0x0107,0x0106)
1181                 or CheckDeadUni12("a3",0x00E7,0x00E6)
1182                 or CheckDeadUni12("a4",0x010B,0x010A)
1183                 or CheckDeadUni12("c1",0x0109,0x0108)
1184                 or CheckDeadUni12("c2",0x010D,0x010C)
1185                 or CheckCompAsc("o","�")))
1186    OutputChar("c","C")
1187  else if (Ebene = 3)
1188    send {blind}]
1189  else if (Ebene = 4)
1190    if (not(lernModus) or lernModus_neo_Entf)
1191      Send {blind}{Del}
1192  else if (Ebene = 5)
1193    SendUnicodeChar(0x03C7) ; chi
1194  else if (Ebene = 6)
1195    SendUnicodeChar(0x2102) ; C (Komplexe Zahlen)
1196return
1197
1198neo_w:
1199  EbeneAktualisieren()
1200  if (Ebene12 and !(CheckDeadUni12("c1",0x0175,0x0174)))
1201    OutputChar("w","W")
1202  else if (Ebene = 3)
1203    SendUnicodeChar(0x005E) ; Zirkumflex
1204  else if (Ebene = 4)
1205    Send {blind}{Insert} ; Einfg
1206  else if (Ebene = 5)
1207    SendUnicodeChar(0x03C9) ; omega
1208  else if (Ebene = 6)
1209    SendUnicodeChar(0x03A9) ; Omega
1210return
1211
1212neo_k:
1213  EbeneAktualisieren()
1214  if (Ebene12 and !(CheckDeadUni12("a3",0x0137,0x0136)
1215                 or CheckDeadUni12("c6",0x1E33,0x1E32)))
1216    OutputChar("k","K")
1217  else if (Ebene = 3)
1218    send {blind}{!}
1219  else if (Ebene = 4)
1220    Send �
1221  else if (Ebene = 5)
1222    SendUnicodeChar(0x03F0) ; kappa symbol (varkappa)
1223  else if (Ebene = 6)
1224    SendUnicodeChar(0x221A) ; Wurzel
1225return
1226
1227neo_h:
1228  EbeneAktualisieren()
1229  if (Ebene12 and !(CheckDeadUni12("a4",0x1E23,0x1E22)
1230                 or CheckDeadUni12("c1",0x0125,0x0124)
1231                 or CheckDeadUni12("c5",0x0127,0x0126)
1232                 or CheckDeadUni12("c6",0x1E25,0x1E24)))
1233    OutputChar("h","H")
1234  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2264))) ; kleiner gleich
1235    send {blind}<
1236  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2077)
1237                          or CheckDeadUni("c5",0x2087)))
1238    Send {blind}{NumPad7}
1239  else if (Ebene = 5)
1240    SendUnicodeChar(0x03C8) ; psi
1241  else if (Ebene = 6)
1242    SendUnicodeChar(0x03A8) ; Psi
1243return
1244
1245neo_g:
1246  EbeneAktualisieren()
1247  if (Ebene12 and !(CheckDeadUni12("a3",0x0123,0x0122)
1248                 or CheckDeadUni12("a4",0x0121,0x0120)
1249                 or CheckDeadUni12("c1",0x011D,0x011C)
1250                 or CheckDeadUni12("c3",0x011F,0x011E)))
1251    OutputChar("g","G")
1252  else if ((Ebene = 3) and !(CheckDeadUni("c5",0x2265))) ; gr��er gleich
1253    send {blind}>
1254  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2078)
1255                          or CheckDeadUni("c5",0x2088)))
1256    Send {blind}{NumPad8}
1257  else if (Ebene = 5)
1258    SendUnicodeChar(0x03B3) ; gamma
1259  else if (Ebene = 6)
1260    SendUnicodeChar(0x0393) ; Gamma
1261return
1262
1263neo_f:
1264  EbeneAktualisieren()
1265  if (Ebene12 and !(CheckDeadUni12("a4",0x1E1F,0x1E1E)
1266                 or CheckDeadUni12("t4",0x0192,0x0191)
1267                 or CheckCompUni("f",0xFB00)))
1268    OutputChar("f","F")
1269  else if ((Ebene = 3) and !(CheckDeadUni("a6",0x2257) ; ring equal to
1270                          or CheckDeadUni("c1",0x2259) ; entspricht
1271                          or CheckDeadUni("c2",0x225A) ; EQUIANGULAR TO
1272                          or CheckDeadUni("c5",0x2261) ; identisch
1273                          or CheckDeadUni("t1",0x2245) ; ungef�hr gleich
1274                          or CheckDeadUni("t4",0x2260))) ; ungleich
1275    send {blind}`=
1276  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2079)
1277                          or CheckDeadUni("c5",0x2089)))
1278    send {blind}{NumPad9}
1279  else if (Ebene = 5)
1280    SendUnicodeChar(0x03C6) ; phi
1281  else if (Ebene = 6)
1282    SendUnicodeChar(0x03A6) ; Phi
1283return
1284
1285neo_q:
1286  EbeneAktualisieren()
1287  if (Ebene12)
1288     OutputChar("q","Q")
1289  else if (Ebene = 3)
1290     send {blind}{&}
1291  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x207A)
1292                          or CheckDeadUni("c5",0x208A)))
1293    Send {blind}{NumPadAdd}
1294  else if (Ebene = 5)
1295     SendUnicodeChar(0x03D5) ; phi symbol (varphi)
1296  else if (Ebene = 6)
1297     SendUnicodeChar(0x211A) ; Q (rationale Zahlen)
1298return
1299
1300neo_sz:
1301  EbeneAktualisieren()
1302  if (Ebene = 1)
1303    if LangSTastatur
1304      outputChar("s","")
1305    else send �
1306  else if (Ebene = 2)
1307    SendUnicodeChar(0x1E9E) ; versal-�
1308  else if (Ebene = 3)
1309    if LangSTastatur
1310      send �
1311    else {
1312      SendUnicodeChar(0x017F) ; langes s
1313      CheckComp("lang_s")
1314  } else if (Ebene = 5)
1315    SendUnicodeChar(0x03C2) ; varsigma
1316  else if (Ebene = 6)
1317    SendUnicodeChar(0x2218) ; Verkn�pfungsoperator
1318return
1319
1320
1321neo_tot3:
1322  noCaps = 1
1323  EbeneAktualisieren()
1324  if (Ebene = 1) {
1325    deadUni(0x02DC) ; Tilde, tot
1326    DeadKey := "t1"
1327  } else if (Ebene = 2) {
1328    deadUni(0x00AF) ; Macron, tot
1329    DeadKey := "t2"
1330  } else if (Ebene = 3) {
1331    deadUni(0x00A8) ; Di�rese
1332    DeadKey := "t3"
1333  } else if Ebene7
1334    SendUnicodeChar(0x0308) ; Verbindungszeichen Di�rese
1335  else if (Ebene = 4) {
1336    deadUni(0x002F) ; Schr�gstrich, tot
1337    DeadKey := "t4"
1338  } else if (Ebene = 5) {
1339    deadUni(0x02DD) ; Doppelakut
1340    DeadKey := "t5"
1341  } else if (Ebene = 6) {
1342    deadUni(0x02CF) ; Komma drunter, tot
1343    DeadKey := "t6"
1344  }
1345
1346return
1347
1348
1349/*
1350
1351  Reihe 3
1352
1353*/
1354
1355neo_u:
1356  EbeneAktualisieren()
1357  if (Ebene12 and !(CheckDeadUni12("a1",0x00FA,0x00DA)
1358                 or CheckDeadUni12("a2",0x00F9,0x00D9)
1359                 or CheckDeadUni12("a5",0x0173,0x0172)
1360                 or CheckDeadUni12("a6",0x016F,0x016E)
1361                 or CheckDeadUni12("c1",0x00FB,0x00DB)
1362                 or CheckDeadUni12("c2",0x01D4,0x01D3)
1363                 or CheckDeadUni12("c3",0x016D,0x016C)
1364                 or CheckDeadUni12("t1",0x0169,0x0168)
1365                 or CheckDeadUni12("t2",0x016B,0x016A)
1366                 or CheckDeadAsc12("t3","�","�")
1367                 or CheckDeadUni12("t5",0x0171,0x0170)))
1368    OutputChar("u","U")
1369  else if (Ebene = 3)
1370    send {blind}\
1371  else if (Ebene = 4)
1372    Send {blind}{Home}
1373  else if (Ebene = 5) { ; leer
1374     CompKey := PriorCompKey
1375     DeadKey := PriorDeadKey
1376  } else if (Ebene = 6)
1377    SendUnicodeChar(0x222E) ; contour integral
1378return
1379
1380neo_i:
1381  EbeneAktualisieren()
1382  if (Ebene12 and !(CheckDeadUni12("a1",0x00ED,0x00CD)
1383                 or CheckDeadUni12("a2",0x00EC,0x00CC)
1384                 or CheckDeadUni12("a4",0x012F,0x012E)
1385                 or CheckDeadUni12("a5",0x0131,0x0130)
1386                 or CheckDeadUni12("c1",0x00EE,0x00CE)
1387                 or CheckDeadUni12("c2",0x01D0,0x01CF)
1388                 or CheckDeadUni12("c3",0x012D,0x012C)
1389                 or CheckDeadUni12("t1",0x0129,0x0128)
1390                 or CheckDeadUni12("t2",0x012B,0x012A)
1391                 or CheckDeadAsc12("t3","�","�")
1392                 or CheckCompUni("f",0xFB01)
1393                 or CheckCompUni("F",0xFB03)))
1394    OutputChar("i","I")
1395  else if (Ebene = 3)
1396    send {blind}`/
1397  else if (Ebene = 4)
1398    Send {Blind}{Left}
1399  else if (Ebene = 5)
1400    SendUnicodeChar(0x03B9) ; iota
1401  else if (Ebene = 6)
1402    SendUnicodeChar(0x222B) ; integral
1403return
1404
1405neo_a:
1406  EbeneAktualisieren()
1407  if (Ebene12 and !(CheckDeadUni12("a1",0x00E1,0x00C1)
1408                or CheckDeadUni12("a2",0x00E0,0x00C0)
1409                or CheckDeadUni12("a5",0x0105,0x0104)
1410                or CheckDeadAsc12("a6","�","�")
1411                or CheckDeadUni12("c1",0x00E2,0x00C2)
1412                or CheckDeadUni12("c2",0x01CE,0x01CD)
1413                or CheckDeadUni12("c3",0x0103,0x0102)
1414                or CheckDeadUni12("t1",0x00E3,0x00C3)
1415                or CheckDeadUni12("t2",0x0101,0x0100)
1416                or CheckDeadAsc12("t3","�","�")))
1417    OutputChar("a","A")
1418  else if (Ebene = 3)
1419    send {blind}{{}
1420  else if (Ebene = 4)
1421    Send {Blind}{Down}
1422  else if (Ebene = 5)
1423    SendUnicodeChar(0x03B1) ; alpha
1424  else if (Ebene = 6)
1425    SendUnicodeChar(0x2200) ; f�r alle
1426return
1427
1428neo_e:
1429  EbeneAktualisieren()
1430  if (Ebene12 and !(CheckDeadUni12("a1",0x00E9,0x00C9)
1431                 or CheckDeadUni12("a2",0x00E8,0x00C8)
1432                 or CheckDeadUni12("a4",0x0117,0x0116)
1433                 or CheckDeadUni12("a5",0x0119,0x0118)
1434                 or CheckDeadUni12("c1",0x00EA,0x00CA)
1435                 or CheckDeadUni12("c2",0x011B,0x011A)
1436                 or CheckDeadUni12("c3",0x0115,0x0114)
1437                 or CheckDeadUni12("t1",0x1EBD,0x1EBC)
1438                 or CheckDeadUni12("t2",0x0113,0x0112)
1439                 or CheckDeadAsc12("t3","�","�")
1440                 or CheckCompAsc12("a","�","�")
1441                 or CheckCompAsc12("A","�","�")
1442                 or CheckCompAsc12("o","�","�")
1443                 or CheckCompAsc12("O","�","�")))
1444    OutputChar("e","E")
1445  else if (Ebene = 3)
1446    send {blind}{}}
1447  else if (Ebene = 4)
1448    Send {Blind}{Right}
1449  else if (Ebene = 5)
1450      SendUnicodeChar(0x03B5) ; epsilon
1451  else if (Ebene = 6)
1452      SendUnicodeChar(0x2203) ; es existiert
1453return
1454
1455neo_o:
1456  EbeneAktualisieren()
1457  if (Ebene12 and !(CheckDeadUni12("a1",0x00F3,0x00D3)
1458                 or CheckDeadUni12("a2",0x00F2,0x00D2)
1459                 or CheckDeadUni12("a5",0x01EB,0x01EA)
1460                 or CheckDeadUni12("c1",0x00F4,0x00D4)
1461                 or CheckDeadUni12("c2",0x01D2,0x01D1)
1462                 or CheckDeadUni12("c3",0x014F,0x014E)
1463                 or CheckDeadUni12("t1",0x00F5,0x00D5)
1464                 or CheckDeadUni12("t2",0x014D,0x014C)
1465                 or CheckDeadAsc12("t3","�","�")
1466                 or CheckDeadUni12("t4",0x00F8,0x00D8)
1467                 or CheckDeadUni12("t5",0x0151,0x0150)))
1468    OutputChar("o","O")
1469  else if (Ebene = 3)
1470    send {blind}*
1471  else if (Ebene = 4)
1472    Send {blind}{End}
1473  else if (Ebene = 5)
1474    SendUnicodeChar(0x03BF) ; omicron
1475  else if (Ebene = 6)
1476    SendUnicodeChar(0x2208) ; element of
1477return
1478
1479neo_s:
1480  EbeneAktualisieren()
1481  if (Ebene12 and !(CheckDeadUni12("a1",0x015B,0x015A)
1482                 or CheckDeadUni12("a3",0x015F,0x015E)
1483                 or CheckDeadUni12("a4",0x1E61,0x1E60)
1484                 or CheckDeadUni12("c1",0x015D,0x015C)
1485                 or CheckDeadUni12("c2",0x0161,0x0160)
1486                 or CheckDeadUni12("c6",0x1E63,0x1A62)))
1487    {
1488      if LangSTastatur and (Ebene = 1) {
1489        SendUnicodeChar(0x017F) ;langes S
1490        CheckComp("lang_s")
1491      } else outputChar("s","S")
1492    } else if (Ebene = 3)
1493    send {blind}?
1494  else if (Ebene = 4)
1495    Send �
1496  else if (Ebene = 5)
1497    SendUnicodeChar(0x03C3) ;sigma
1498  else if (Ebene = 6)
1499    SendUnicodeChar(0x03A3) ;Sigma
1500return
1501
1502neo_n:
1503  EbeneAktualisieren()
1504  if (Ebene12 and !(CheckDeadUni12("a1",0x0144,0x0143)
1505                 or CheckDeadUni12("a3",0x0146,0x0145)
1506                 or CheckDeadUni12("a4",0x1E45,0x1E44)
1507                 or CheckDeadUni12("c2",0x0148,0x0147)
1508                 or CheckDeadUni12("t1",0x00F1,0x00D1)))
1509    OutputChar("n","N")
1510  else if (Ebene = 3)
1511    send {blind}(
1512  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2074)
1513                          or CheckDeadUni("c5",0x2084)))
1514    Send {blind}{NumPad4}
1515  else if (Ebene = 5)
1516    SendUnicodeChar(0x03BD) ; nu
1517  else if (Ebene = 6)
1518    SendUnicodeChar(0x2115) ; N (nat�rliche Zahlen)
1519return
1520
1521neo_r:
1522  EbeneAktualisieren()
1523  if (Ebene12 and !(CheckDeadUni12("a1",0x0155,0x0154)
1524                 or CheckDeadUni12("a3",0x0157,0x0156)
1525                 or CheckDeadUni12("a4",0x0E59,0x0E58)
1526                 or CheckDeadUni12("c2",0x0159,0x0158)
1527                 or CheckDeadUni12("c6",0x1E5B,0x1E5A)
1528                 or CheckCompAsc12("o","�","�")
1529                 or CheckCompAsc12("O","�","�")))
1530    OutputChar("r","R")
1531  else if (Ebene = 3)
1532    send {blind})
1533  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2075)
1534                          or CheckDeadUni("c5",0x2085)))
1535    Send {blind}{NumPad5}
1536  else if (Ebene = 5)
1537    SendUnicodeChar(0x03F1) ; rho symbol (varrho)
1538  else if (Ebene = 6)
1539    SendUnicodeChar(0x211D) ; R (reelle Zahlen)
1540return
1541
1542neo_t:
1543  EbeneAktualisieren()
1544  if (Ebene12 and !(CheckDeadUni12("a3",0x0163,0x0162)
1545                 or CheckDeadUni12("a4",0x1E6B,0x1E6A)
1546                 or CheckDeadUni12("c2",0x0165,0x0164)
1547                 or CheckDeadUni12("c5",0x0167,0x0166)
1548                 or CheckDeadUni12("c6",0x1E6D,0x1E6C)
1549                 or CheckCompUni("lang_s",0xFB05)
1550                 or CheckCompUni("s",0xFB06)))
1551    OutputChar("t","T")
1552  else if (Ebene = 3)
1553    send {blind}- ; Bisstrich
1554  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x2076)
1555                  or CheckDeadUni("c5",0x2086)))
1556    Send {blind}{NumPad6}
1557  else if (Ebene = 5)
1558    SendUnicodeChar(0x03C4) ; tau
1559  else if (Ebene = 6)
1560    SendUnicodeChar(0x2202) ; partielle Ableitung
1561return
1562
1563neo_d:
1564   EbeneAktualisieren()
1565   if (Ebene12 and !(CheckDeadUni12("a4",0x1E0B,0x1E0A)
1566                  or CheckDeadUni12("c2",0x010F,0x010E)
1567                  or CheckDeadUni12("c5",0x0111,0x0110)
1568                  or CheckDeadUni12("c6",0x1E0D,0x1E0C)
1569                  or CheckDeadUni12("t4",0x00F0,0x00D0)))
1570      OutputChar("d","D")
1571   else if (Ebene = 3)
1572      send {blind}:
1573   else if (Ebene = 4)
1574                send `,
1575   else if (Ebene = 5)
1576      SendUnicodeChar(0x03B4) ; delta
1577   else if (Ebene = 6)
1578      SendUnicodeChar(0x0394) ; Delta
1579return
1580
1581neo_y:
1582  EbeneAktualisieren()
1583  if (Ebene12 and !(CheckDeadUni12("a1",0x00FD,0x00DD)
1584                 or CheckDeadUni12("c1",0x0177,0x0176)
1585                 or CheckDeadAsc12("t3","�","�")))
1586    OutputChar("y","Y")
1587  else if (Ebene = 3)
1588    send {blind}@
1589  else if (Ebene = 4)
1590    Send {blind}.
1591  else if (Ebene = 5)
1592    SendUnicodeChar(0x03C5) ; upsilon
1593  else if (Ebene = 6)
1594    SendUnicodeChar(0x2207) ; nabla
1595return
1596
1597/*
1598
1599  Reihe 4
1600
1601*/
1602
1603neo_�:
1604  EbeneAktualisieren()
1605  if (Ebene12 and !(CheckDeadUni12("a1",0x01D8,0x01D7)
1606                 or CheckDeadUni12("a2",0x01DC,0x01DB)
1607                 or CheckDeadUni12("c2",0x01DA,0x01D9)
1608                 or CheckDeadUni12("t2",0x01D6,0x01D5)))
1609    OutputChar("�","�")
1610  else if (Ebene = 3)
1611    send {#}
1612  else if (Ebene = 4)
1613    Send {blind}{Esc}
1614  else if (Ebene = 5) { ; leer
1615    DeadKey := PriorDeadKey
1616    CompKey := PriorCompKey
1617  } else if (Ebene = 6)
1618    SendUnicodeChar(0x221D) ; proportional
1619return
1620
1621neo_�:
1622  EbeneAktualisieren()
1623  if (Ebene12 and !(CheckDeadUni12("t2",0x022B,0x022A)))
1624    OutputChar("�","�")
1625  else if (Ebene = 3)
1626    send {blind}$
1627  else if (Ebene = 4)
1628    send {blind}{Tab}
1629  else if (Ebene = 5) { ; leer
1630    DeadKey := PriorDeadKey
1631    CompKey := PriorCompKey
1632  } else if (Ebene = 6)
1633    SendUnicodeChar(0x2111) ; Fraktur I
1634return
1635
1636neo_�:
1637  EbeneAktualisieren()
1638  if (Ebene12 and !(CheckDeadUni12("t2",0x01DF,0x01DE)))
1639    OutputChar("�","�")
1640  else if (Ebene = 3)
1641    send {blind}|
1642  else if (Ebene = 4)
1643    Send {blind}{PgDn} ; Next
1644  else if (Ebene = 5)
1645    SendUnicodeChar(0x03B7) ; eta
1646  else if (Ebene = 6)
1647    SendUnicodeChar(0x211C) ; Fraktur R
1648return
1649
1650neo_p:
1651  EbeneAktualisieren()
1652  if (Ebene12 and !(CheckDeadUni12("a4",0x1E57,0x1E56)))
1653    OutputChar("p","P")
1654  else if ((Ebene = 3) and !(CheckDeadUni("t1",0x2248)))
1655    send {blind}~
1656  else if (Ebene = 4)
1657      Send {blind}{Enter}
1658  else if (Ebene = 5)
1659    SendUnicodeChar(0x03C0) ; pi
1660  else if (Ebene = 6)
1661    SendUnicodeChar(0x03A0) ; Pi
1662return
1663
1664neo_z:
1665  EbeneAktualisieren()
1666  if (Ebene12 and !(CheckDeadUni12("a1",0x017A,0x0179)
1667                 or CheckDeadUni12("a4",0x017C,0x017B)
1668                 or CheckDeadUni12("c2",0x017E,0x017D)
1669                 or CheckDeadUni12("c6",0x1E93,0x1E92)))
1670    OutputChar("z","Z")
1671  else if (Ebene = 3)
1672    send ``{space} ; untot
1673  else if (Ebene = 4) { ; leer
1674    DeadKey := PriorDeadKey
1675    CompKey := PriorCompKey
1676  } else if (Ebene = 5)
1677    SendUnicodeChar(0x03B6) ; zeta
1678  else if (Ebene = 6)
1679    SendUnicodeChar(0x2124) ; Z (ganze Zahlen)
1680return
1681
1682neo_b:
1683  EbeneAktualisieren()
1684  if (Ebene12 and !(CheckDeadUni12("a4",0x1E03,0x1E02)))
1685    OutputChar("b","B")
1686  else if (Ebene = 3)
1687    send {blind}{+}
1688  else if (Ebene = 4)
1689    send {blind}:
1690  else if (Ebene = 5)
1691    SendUnicodeChar(0x03B2) ; beta
1692  else if (Ebene = 6)
1693    SendUnicodeChar(0x21D2) ; Doppel-Pfeil rechts
1694return
1695
1696neo_m:
1697  EbeneAktualisieren()
1698  if (Ebene12 and !(CheckDeadUni12("a4",0x1E41,0x1E40)
1699                      or CheckDeadUni12("c6",0x1E43,0x1E42)
1700                      or CheckCompUni12("t",0x2122,0x2122) ; TM
1701                      or CheckCompUni12("s",0x2120,0x2120))) ; SM
1702    OutputChar("m","M")
1703  else if (Ebene = 3)
1704    send {blind}`%
1705  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B9)
1706                          or CheckDeadUni("c5",0x2081)))
1707    Send {blind}{NumPad1}
1708  else if (Ebene = 5)
1709    SendUnicodeChar(0x03BC) ; griechisch mu, micro w�re 0x00B5
1710  else if (Ebene = 6)
1711    SendUnicodeChar(0x21D4) ; doppelter Doppelpfeil (genau dann wenn)
1712return
1713
1714neo_komma:
1715  noCaps = 1
1716  EbeneAktualisieren()
1717  if (Ebene = 1)
1718    if isMod2Locked
1719      send {blind}{Shift down} , {Shift up}
1720    else
1721      send {blind},
1722  else if (Ebene = 2)
1723     SendUnicodeChar(0x22EE) ; vertikale ellipse
1724  else if (Ebene = 3)
1725    send {blind}"
1726  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B2)
1727                          or CheckDeadUni("c5",0x2082)))
1728    Send {blind}{NumPad2}
1729  else if (Ebene = 5)
1730    SendUnicodeChar(0x03C1) ; rho
1731  else if (Ebene = 6)
1732    SendUnicodeChar(0x21D0) ; Doppelpfeil links
1733return
1734
1735neo_punkt:
1736  noCaps = 1
1737  EbeneAktualisieren()
1738  if (Ebene = 1)
1739    if isMod2Locked
1740      send {blind}{Shift down} . {Shift up}
1741    else
1742      send {blind}.
1743  else if (Ebene = 2)
1744    SendUnicodeChar(0x2026) ; ellipse
1745  else if (Ebene = 3)
1746    send {blind}'
1747  else if ((Ebene = 4) and !(CheckDeadUni("c1",0x00B3)
1748                          or CheckDeadUni("c5",0x2083)))
1749    Send {blind}{NumPad3}
1750  else if (Ebene = 5)
1751    SendUnicodeChar(0x03D1) ; theta symbol (vartheta)
1752  else if (Ebene = 6)
1753    SendUnicodeChar(0x0398) ; Theta
1754return
1755
1756
1757neo_j:
1758  EbeneAktualisieren()
1759  if (Ebene12 and !(CheckDeadUni12("c1",0x0135,0x0134)
1760            or CheckDeadUni12("c2",0x01F0,"")
1761            or CheckCompUni("i",0x0133) ; ij
1762            or CheckCompUni("l",0x01C9) ; lj
1763            or CheckCompUni("n",0x01CC) ; nj
1764            or CheckCompUni("I",0x0132) ; IJ
1765            or CheckCompUni12("L",0x01C8,0x01C7) ; Lj/LJ
1766            or CheckCompUni12("N",0x01CB,0x01CA))) ; Nj/NJ
1767    OutputChar("j","J")
1768  else if (Ebene = 3)
1769    send {blind}`;
1770  else if (Ebene = 4)
1771    Send {blind}`;
1772  else if (Ebene = 5)
1773    SendUnicodeChar(0x03B8) ; theta
1774  else if (Ebene = 6)
1775    SendUnicodeChar(0x2261) ; identisch
1776return
1777
1778/*
1779
1780  Numpad
1781
1782*/
1783
1784neo_NumLock:
1785  EbeneAktualisieren()
1786  if (Ebene = 1)
1787    send `=
1788  if (Ebene = 2) { ; Funktioniert nicht
1789    SetNumLockState
1790    send {NumLock}
1791  }
1792  if (Ebene = 3)
1793    SendUnicodeChar(0x2248) ; Fast gleich
1794  if (Ebene = 4)
1795    SendUnicodeChar(0x2260) ; Ungleich zu
1796return
1797
1798neo_NumpadDiv:
1799  EbeneAktualisieren()
1800  if Ebene14
1801    send {blind}{NumpadDiv}
1802  else if (Ebene = 2)
1803    SendUnicodeChar(0x2215) ; Slash
1804  else if (Ebene = 3)
1805    send {blind}�
1806return
1807
1808neo_NumpadMult:
1809  EbeneAktualisieren()
1810  if Ebene14
1811    send {blind}{NumpadMult}
1812  else if (Ebene = 2)
1813    SendUnicodeChar(0x22C5) ; Cdot
1814  else if (Ebene = 3)
1815    send {blind}�
1816return
1817
1818neo_NumpadSub:
1819  EbeneAktualisieren()
1820  if (Ebene14 and !(CheckDeadUni("c1",0x207B)
1821                 or CheckDeadUni("c5",0x208B)))
1822    send {blind}{NumpadSub}
1823  else if (Ebene = 3)
1824    SendUnicodeChar(0x2212) ; Echtes Minus
1825return
1826
1827neo_NumpadAdd:
1828  EbeneAktualisieren()
1829  if (Ebene14 and !(CheckDeadUni("c1",0x207A)
1830                 or CheckDeadUni("c5",0x208A)))
1831    send {blind}{NumpadAdd}
1832  else if (Ebene = 3)
1833    send {blind}�
1834  else if (Ebene = 2)
1835    SendUnicodeChar(0x2213) ; Inverses �
1836return
1837
1838neo_NumpadEnter:
1839  send {blind}{NumpadEnter}
1840return
1841
1842neo_Numpad7:
1843  EbeneAktualisieren()
1844  if (Ebene = 1) {
1845    if NumLock
1846      send {blind}{Numpad7}
1847    else
1848      send {blind) {Shift up}{Numpad7}
1849    if (PriorDeadKey = "comp")
1850      CompKey := "7"
1851  } else if (Ebene = 2)
1852    SendUnicodeChar(0x2020) ; Kreuz
1853  else if (Ebene = 3)
1854    SendUnicodeChar(0x2195) ; Hoch-Runter-Pfeil
1855  else if (Ebene = 4)
1856    if NumLock
1857      send {blind}{Shift up}{NumpadHome}
1858    else
1859      send {blind}{NumpadHome}
1860return
1861
1862neo_Numpad8:
1863  EbeneAktualisieren()
1864  if ((Ebene = 1) and !(CheckCompUni("1",0x215B) ; 1/8
1865                     or CheckCompUni("3",0x215C) ; 3/8
1866                     or CheckCompUni("5",0x215D) ; 5/8
1867                     or CheckCompUni("7",0x215E))) { ; 7/8
1868    if NumLock
1869      send {blind}{Numpad8}
1870    else
1871      send {blind) {Shift up}{Numpad8}
1872    if (PriorDeadKey = "comp")
1873      CompKey := "8"
1874  } else if (Ebene = 2)
1875    SendUnicodeChar(0x2229) ; Durchschnitt
1876  else if (Ebene = 3)
1877    SendUnicodeChar(0x2191) ; Hochpfeil
1878  else if (Ebene = 4)
1879    if NumLock
1880      send {blind}{Shift up}{NumpadUp}
1881    else
1882      send {blind}{NumpadUp}
1883return
1884
1885neo_Numpad9:
1886  EbeneAktualisieren()
1887  if (Ebene = 1) {
1888    if NumLock
1889      send {blind}{Numpad9}
1890    else
1891      send {blind) {Shift up}{Numpad9}
1892    if (PriorDeadKey = "comp")
1893      CompKey := "9"
1894  } else if (Ebene = 2)
1895    SendUnicodeChar(0x2297) ; Tensorprodukt / Vektor in die Ebene zeigend
1896  else if (Ebene = 3)
1897    SendUnicodeChar(0x220D) ; Kleines umgekehrtes Elementzeichen
1898  else if (Ebene = 4)
1899    if NumLock
1900      send {blind}{Shift up}{NumpadPgUp}
1901    else
1902      send {blind}{NumpadPgUp}
1903return
1904
1905neo_Numpad4:
1906  EbeneAktualisieren()
1907  if ((Ebene = 1) and !(CheckCompUni("1",0x00BC) ; 1/4
1908                     or CheckCompUni("3",0x00BE))) { ; 3/4
1909    if NumLock
1910      send {blind}{Numpad4}
1911    else
1912      send {blind) {Shift up}{Numpad4}
1913    if (PriorDeadKey = "comp")
1914      CompKey := "4"
1915  } else if (Ebene = 2)
1916    SendUnicodeChar(0x2282) ; Teilmenge
1917  else if (Ebene = 3)
1918    SendUnicodeChar(0x2190) ; Linkspfeil
1919  else if (Ebene = 4)
1920    if NumLock
1921      send {blind}{Shift up}{NumpadLeft}
1922    else
1923      send {blind}{NumpadLeft}
1924return
1925
1926neo_Numpad5:
1927  EbeneAktualisieren()
1928  if ((Ebene = 1) and !(CheckCompUni("1",0x2155) ; 1/5
1929                     or CheckCompUni("2",0x2156) ; 2/5
1930                     or CheckCompUni("3",0x2157) ; 3/5
1931                     or CheckCompUni("4",0x2158))) { ; 4/5
1932    if NumLock
1933      send {blind}{Numpad5}
1934    else
1935      send {blind) {Shift up}{Numpad5}
1936    if (PriorDeadKey = "comp")
1937      CompKey := "5"
1938  } else if (Ebene = 3)
1939    SendUnicodeChar(0x221E) ; Unendlich
1940  else if (Ebene = 2)
1941    SendUnicodeChar(0x20AC) ; Euro
1942  else if (Ebene = 4) ; Beg
1943    if NumLock
1944      send {NumPad5}
1945    else
1946      send {Shift}{Numpad5}
1947return
1948
1949neo_Numpad6:
1950  EbeneAktualisieren()
1951  if ((Ebene = 1) and !(CheckCompUni("1",0x2159) ; 1/6
1952                     or CheckCompUni("5",0x215a))) { ; 5/6
1953    if NumLock
1954      send {blind}{Numpad6}
1955    else
1956      send {blind) {Shift up}{Numpad6}
1957    if (PriorDeadKey = "comp")
1958      CompKey := "6"
1959  } else if (Ebene = 2)
1960    SendUnicodeChar(0x2283) ; Obermenge
1961  else if (Ebene = 3)
1962    SendUnicodeChar(0x2192) ; Rechtspfeil
1963  else if (Ebene = 4)
1964    if NumLock
1965      send {blind}{Shift up}{NumpadRight}
1966    else
1967      send {blind}{NumpadRight}
1968return
1969
1970neo_Numpad1:
1971  EbeneAktualisieren()
1972  if (Ebene = 1) {
1973    if NumLock
1974      send {blind}{Numpad1}
1975    else
1976      send {blind) {Shift up}{Numpad1}
1977    if (PriorDeadKey = "comp")
1978      CompKey := "1"
1979  } else if (Ebene = 2)
1980    SendUnicodeChar(0x2714) ; H�kchen
1981  else if (Ebene = 3)
1982    SendUnicodeChar(0x2194) ; Links-Rechts-Pfeil
1983  else if (Ebene = 4)
1984    if NumLock
1985      send {blind}{Shift up}{NumpadEnd}
1986    else
1987      send {blind}{NumpadEnd}
1988return
1989
1990neo_Numpad2:
1991  EbeneAktualisieren()
1992  if ((Ebene = 1) and !(CheckCompUni("1",0x00BD))) { ; 1/2
1993    if NumLock
1994      send {blind}{Numpad2}
1995    else
1996      send {blind) {Shift up}{Numpad2}
1997    if (PriorDeadKey = "comp")
1998      CompKey := "2"
1999  } else if (Ebene = 2)
2000    SendUnicodeChar(0x222A) ; Vereinigung
2001  else if (Ebene = 3)
2002    SendUnicodeChar(0x2192) ; Untenpfeil
2003  else if (Ebene = 4)
2004    if NumLock
2005      send {blind}{Shift up}{NumpadDown}
2006    else
2007      send {blind}{NumpadDown}
2008return
2009
2010neo_Numpad3:
2011  EbeneAktualisieren()
2012  if ((Ebene = 1) and !(CheckCompUni("1",0x2153) ; 1/3
2013                     or CheckCompUni("5",0x2154))) { ; 2/3
2014    if NumLock
2015      send {blind}{Numpad3}
2016    else
2017      send {blind) {Shift up}{Numpad3}
2018    if (PriorDeadKey = "comp")
2019      CompKey := "3"
2020  } else if (Ebene = 2)
2021    SendUnicodeChar(0x2718) ; Kreuzchen
2022  else if (Ebene = 3)
2023    SendUnicodeChar(0x2192) ; Rechtspfeil
2024  else if (Ebene = 4)
2025    if NumLock
2026      send {blind}{Shift up}{NumpadPgDn}
2027    else
2028      send {blind}{NumpadPgDn}
2029return
2030
2031neo_Numpad0:
2032  EbeneAktualisieren()
2033  if (Ebene = 1) {
2034    if NumLock
2035      send {blind}{Numpad0}
2036    else
2037      send {blind) {Shift up}{Numpad0}
2038    if (PriorDeadKey = "comp")
2039      CompKey := "0"
2040  } else if (Ebene = 2)
2041    SendUnicodeChar(0x2030) ; Promille
2042  else if (Ebene = 3)
2043    SendUnicodeChar(0x0025) ; Prozent
2044  else if (Ebene = 4)
2045    if NumLock
2046      send {blind}{Shift up}{NumpadIns}
2047    else
2048      send {blind}{NumpadIns}
2049return
2050
2051neo_NumpadDot:
2052  EbeneAktualisieren()
2053  if (Ebene = 1) {
2054    if NumLock
2055      send {blind}{NumpadDot}
2056    else       
2057      send {blind) {Shift up}{NumpadDot}
2058  } else if (Ebene = 2)
2059    send `,
2060  else if (Ebene = 3)
2061    send {blind}.
2062  else if (Ebene = 4)
2063    if NumLock
2064      send {blind}{Shift up}{NumpadDel}
2065    else
2066      send {blind}{NumpadDel}
2067return
2068
2069/*
2070
2071  Sondertasten
2072
2073*/
2074
2075*space::
2076  if ((einHandNeo))
2077   spacepressed := 1
2078  else
2079   goto neo_SpaceUp
2080return
2081
2082*space up::
2083  if ((einHandNeo)) {
2084    if ((keypressed))
2085    {
2086     keypressed := 0
2087     spacepressed := 0
2088    } else
2089    {
2090      goto neo_SpaceUp
2091    }
2092  } else
2093    {} ;do nothing
2094return
2095
2096neo_SpaceUp:
2097    EbeneAktualisieren()
2098    if ((Ebene = 1) and !(CheckComp3Uni("r_1",0x2170) ; R�misch i
2099                    or CheckComp3Uni("R_1",0x2160))) ; R�misch I
2100      Send {blind}{Space}
2101    else if ((Ebene = 2) or (Ebene = 3))
2102      Send {blind}{Space}
2103    else if (Ebene = 4 and !(CheckDeadUni("c1",0x2070)
2104                       or CheckDeadUni("c5",0x2080)))
2105      Send {blind}{NumPad0}
2106    else if (Ebene = 5)
2107      SendUnicodeChar(0x00A0) ; gesch�tztes Leerzeichen
2108    else if (Ebene = 6)
2109      SendUnicodeChar(0x202F) ; schmales gesch�tztes Leerzeichen
2110    DeadKey := "" CompKey := ""
2111  spacepressed := 0
2112  keypressed := 0
2113return
2114
2115/*
2116  Folgende Tasten sind nur aufgef�hrt, um PriorDeadKey zu leeren.
2117  Irgendwie sieht das noch nicht sch�n aus. Vielleicht l�sst sich dieses
2118  Problem auch eleganter l�sen...
2119*/
2120
2121*Enter::
2122  if (not(lernModus) or lernModus_std_Return) {
2123    send {Blind}{Enter}
2124    DeadKey := "" CompKey := ""
2125  } return
2126
2127*Backspace::
2128  if (not(lernModus) or lernModus_std_Backspace) {
2129    send {Blind}{Backspace}
2130    DeadKey := "" CompKey := ""
2131  } return
2132
2133*Del::
2134  if (not(lernModus) or lernModus_std_Entf)
2135    send {Blind}{Del}
2136return
2137
2138*Ins::
2139  if (not(lernModus) or lernModus_std_Einf)
2140    send {Blind}{Ins}
2141return
2142
2143/*
2144Auf Mod3+Tab liegt Compose.
2145*/
2146
2147neo_tab:
2148  if (IsMod3Pressed()) {
2149    DeadKey := "comp"
2150    CompKey := ""
2151  } else {
2152    send {blind}{Tab}
2153    DeadKey := ""
2154    CompKey := ""
2155  } return
2156
2157*Home::
2158  if (not(lernModus) or lernModus_std_Pos1) {
2159    send {Blind}{Home}
2160    DeadKey := "" CompKey := ""
2161  } return
2162
2163*End::
2164  if (not(lernModus) or lernModus_std_Ende) {
2165    send {Blind}{End}
2166    DeadKey := "" CompKey := ""
2167  } return
2168
2169*PgUp::
2170  if (not(lernModus) or lernModus_std_PgUp) {
2171    send {Blind}{PgUp}
2172    DeadKey := "" CompKey := ""
2173  } return
2174
2175*PgDn::
2176  if (not(lernModus) or lernModus_std_PgDn) {
2177    send {Blind}{PgDn}
2178    DeadKey := "" CompKey := ""
2179  } return
2180
2181*Up::
2182  if (not(lernModus) or lernModus_std_Hoch) {
2183    send {Blind}{Up}
2184    DeadKey := "" CompKey := ""
2185  } return
2186
2187*Down::
2188  if (not(lernModus) or lernModus_std_Runter) {
2189    send {Blind}{Down}
2190    DeadKey := "" CompKey := ""
2191  } return
2192
2193*Left::
2194  if (not(lernModus) or lernModus_std_Links) {
2195    send {Blind}{Left}
2196    DeadKey := "" CompKey := ""
2197  } return
2198
2199*Right::
2200  if (not(lernModus) or lernModus_std_Rechts) {
2201    send {Blind}{Right}
2202    DeadKey := "" CompKey := ""
2203  } return
2204/*
2205   ------------------------------------------------------
2206   Methode KeyboardLED zur Steuerung der Keyboard-LEDs
2207   (NumLock/CapsLock/ScrollLock-Lichter)
2208   
2209   Benutzungshinweise: Man benutze
2210   KeyboardLED(LEDvalue,"Cmd"), wobei
2211   Cmd = on/off/switch,
2212   LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4,
2213   bzw. eine beliebige Summe dieser Werte:
2214   AlleAus=0, CapsLock+NumLock=6, etc.
2215   
2216   Der folgende Code wurde �bernommen von:
2217   http://www.autohotkey.com/forum/viewtopic.php?t=10532
2218   
2219   Um eventuelle Wechselwirkungen mit dem bestehenden
2220   Code (insb. der Unicode-Konvertierung) auszuschlie�en,
2221   sind auch alle (Hilfsmethoden) mit dem Postfix LED
2222   versehen worden.
2223   ------------------------------------------------------
2224*/
2225
2226KeyboardLED(LEDvalue, Cmd){ ; LEDvalue: ScrollLock=1, NumLock=2, CapsLock=4 ; Cmd = on/off/switch
2227  Static h_device
2228  If ! h_device ; initialise
2229  {
2230    device=\Device\KeyBoardClass0
2231    SetUnicodeStrLED(fn,device)
2232    h_device:=NtCreateFileLED(fn,0+0x00000100+0x00000080+0x00100000,1,1,0x00000040+0x00000020,0)
2233  }
2234  VarSetCapacity(output_actual,4,0)
2235  input_size=4
2236  VarSetCapacity(input,input_size,0)
2237  If Cmd=switch ;switches every LED according to LEDvalue
2238   KeyLED:=LEDvalue
2239  If Cmd=on ;forces all choosen LED's to ON (LEDvalue= 0 ->LED's according to keystate)
2240   KeyLED:=LEDvalue | (GetKeyState("ScrollLock", "T") + 2*GetKeyState("NumLock", "T") + 4*GetKeyState("CapsLock", "T"))
2241  If Cmd=off ;forces all choosen LED's to OFF (LEDvalue= 0 ->LED's according to keystate)
2242    {
2243    LEDvalue:=LEDvalue ^ 7
2244    KeyLED:=LEDvalue & (GetKeyState("ScrollLock","T") + 2*GetKeyState("NumLock","T") + 4*GetKeyState("CapsLock","T"))
2245    }
2246  ; EncodeIntegerLED(KeyLED,1,&input,2) ;input bit pattern (KeyLED): bit 0 = scrolllock ;bit 1 = numlock ;bit 2 = capslock
2247  input:=Chr(1) Chr(1) Chr(KeyLED)
2248  input:=Chr(1)
2249  input=
2250  success:=DllCall("DeviceIoControl"
2251    , "uint", h_device
2252    , "uint", CTL_CODE_LED( 0x0000000b     ; FILE_DEVICE_KEYBOARD
2253              , 2
2254              , 0             ; METHOD_BUFFERED
2255              , 0  )          ; FILE_ANY_ACCESS
2256    , "uint", &input
2257    , "uint", input_size
2258    , "uint", 0
2259    , "uint", 0
2260    , "uint", &output_actual
2261    , "uint", 0 )
2262}
2263
2264CTL_CODE_LED(p_device_type,p_function,p_method,p_access ){
2265  Return, ( p_device_type << 16 ) | ( p_access << 14 ) | ( p_function << 2 ) | p_method
2266}
2267
2268NtCreateFileLED(ByRef wfilename,desiredaccess,sharemode,createdist,flags,fattribs){
2269  VarSetCapacity(fh,4,0)
2270  VarSetCapacity(objattrib,24,0)
2271  VarSetCapacity(io,8,0)
2272  VarSetCapacity(pus,8)
2273  uslen:=DllCall("lstrlenW","str",wfilename)*2
2274  InsertIntegerLED(uslen,pus,0,2)
2275  InsertIntegerLED(uslen,pus,2,2)
2276  InsertIntegerLED(&wfilename,pus,4)
2277  InsertIntegerLED(24,objattrib,0)
2278  InsertIntegerLED(&pus,objattrib,8)
2279  status:=DllCall("ntdll\ZwCreateFile","str",fh,"UInt",desiredaccess,"str",objattrib,"str",io,"UInt",0,"UInt",fattribs
2280                  ,"UInt",sharemode,"UInt",createdist,"UInt",flags,"UInt",0,"UInt",0, "UInt")
2281  return ExtractIntegerLED(fh)
2282}
2283
2284SetUnicodeStrLED(ByRef out, str_){
2285  VarSetCapacity(st1, 8, 0)
2286  InsertIntegerLED(0x530025, st1)
2287  VarSetCapacity(out, (StrLen(str_)+1)*2, 0)
2288  DllCall("wsprintfW", "str", out, "str", st1, "str", str_, "Cdecl UInt")
2289}
2290
2291ExtractIntegerLED(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4){
2292; pSource is a string (buffer) whose memory area contains a raw/binary integer at pOffset.
2293; The caller should pass true for pSigned to interpret the result as signed vs. unsigned.
2294; pSize is the size of PSource's integer in bytes (e.g. 4 bytes for a DWORD or Int).
2295; pSource must be ByRef to avoid corruption during the formal-to-actual copying process
2296; (since pSource might contain valid data beyond its first binary zero).
2297  Loop %pSize%  ; Build the integer by adding up its bytes.
2298    result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1)
2299  if (!pIsSigned OR pSize > 4 OR result < 0x80000000)
2300    return result  ; Signed vs. unsigned doesn't matter in these cases.
2301  ; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart:
2302  return -(0xFFFFFFFF - result + 1)
2303}
2304
2305InsertIntegerLED(pInteger, ByRef pDest, pOffset = 0, pSize = 4){
2306; The caller must ensure that pDest has sufficient capacity.  To preserve any existing contents in pDest,
2307; only pSize number of bytes starting at pOffset are altered in it.
2308  Loop %pSize%  ; Copy each byte in the integer into the structure as raw binary data.
2309    DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF)
2310}
2311deadAsc(val) {
2312  global
2313  if !DeadSilence
2314    send % val
2315}
2316
2317deadUni(val) {
2318  global
2319  if !DeadSilence
2320    SendUnicodeChar(val)
2321}
2322
2323undeadAsc(val) {
2324  global
2325  if DeadSilence
2326    send % val
2327  else
2328    send % "{bs}" . val
2329}
2330
2331undeadUni(val){
2332  global
2333  if !DeadSilence
2334    send {bs}
2335  SendUnicodeChar(val)
2336}
2337
2338CheckDeadAsc(d,val) {
2339  global
2340  if (PriorDeadKey == d) {
2341    undeadAsc(val)
2342    return 1
2343  } else return 0
2344}
2345
2346CheckDeadUni(d,val) {
2347  global
2348  if (PriorDeadKey == d) {
2349    undeadUni(val)
2350    return 1
2351  } else return 0
2352}
2353
2354CheckDeadAsc12(d,val1,val2) {
2355  global
2356  if (PriorDeadKey == d){
2357    if (Ebene = 1) and (val1 != "") {
2358      undeadAsc(val1)
2359      return 1
2360    } else if (Ebene = 2) and (val2 != "") {
2361      undeadAsc(val2)
2362      return 1
2363    } else return 0
2364  } else return 0
2365}
2366
2367CheckDeadUni12(d,val1,val2) {
2368  global
2369  if(PriorDeadKey == d) {
2370    if (Ebene = 1) and (val1 != "") {
2371      undeadUni(val1)
2372      return 1
2373    } else if (Ebene = 2) and (val2 != "") {
2374      undeadUni(val2)
2375      return 1
2376    } else return 0
2377  } else return 0
2378}
2379
2380compAsc(val) {
2381  global
2382  if !DeadCompose
2383    send % val
2384}
2385
2386compUni(val) {
2387  global
2388  if !DeadCompose
2389    SendUnicodeChar(val)
2390}
2391
2392uncompAsc(val) {
2393  global
2394  if DeadCompose
2395    send % val
2396  else send % "{bs}" . val
2397}
2398
2399uncompUni(val) {
2400  global
2401  if !DeadCompose
2402    send {bs}
2403  SendUnicodeChar(val)   
2404}
2405
2406uncomp3Uni(val) {
2407  global
2408  if !DeadCompose
2409    send {bs}{bs}
2410  SendUnicodeChar(val)   
2411}
2412
2413CheckCompAsc(d,val) {
2414  global
2415  if (PriorCompKey == d) {
2416    uncompAsc(val)
2417    return 1
2418  } else return 0
2419}
2420
2421CheckCompAsc12(d,val1,val2) {
2422  global
2423  if (PriorCompKey == d)
2424    if (Ebene = 1) and (val1 != "") {
2425      uncompAsc(val1)
2426      return 1
2427    } else if (Ebene = 2) and (val2 != "") {
2428      uncompAsc(val2)
2429      return 1
2430    } else return 0
2431  else return 0
2432}
2433
2434CheckCompUni(d,val) {
2435  global
2436  if (PriorCompKey == d) {
2437    uncompUni(val)
2438    return 1
2439  } else return 0
2440}
2441
2442CheckCompUni12(d,val1,val2){
2443  global
2444  if (PriorCompKey == d) {
2445    if (Ebene = 1) and (val1 != "") {
2446      uncompUni(val1)
2447      return 1
2448    }else if (Ebene = 2) and (val2 != "") {
2449      uncompUni(val2)
2450      return 1
2451    } else return 0
2452  } else return 0
2453}
2454
2455CheckComp3Uni(d,val) {
2456  global
2457  if (PriorCompKey == d) {
2458    uncomp3Uni(val)
2459    return 1
2460  } else return 0
2461}
2462
2463CheckComp3Uni12(d,val1,val2) {
2464  global
2465  if (PriorCompKey == d) {
2466    if (Ebene = 1) and (val1 != "") {
2467      uncomp3Uni(val1)
2468      return 1
2469    } else if (Ebene = 2) and (val2 != "") {
2470      uncomp3Uni(val2)
2471      return 1
2472    } else return 0
2473  } else return 0
2474}
2475
2476outputChar(val1,val2) {
2477  global
2478  if (Ebene = 1)
2479    c := val1
2480  else c := val2
2481  if GetKeyState("Shift","P") and isMod2Locked
2482    send % "{blind}{Shift Up}" . c . "{Shift Down}"
2483  else send % "{blind}" . c
2484  if (PriorDeadKey = "comp")
2485    CompKey := c
2486}
2487
2488checkComp(d) {
2489  if (PriorDeadKey = "comp") {
2490    CompKey := d
2491    return 1
2492  }
2493}
2494/*
2495   ------------------------------------------------------
2496   Methoden zum Senden von Unicode-Zeichen
2497   ------------------------------------------------------
2498
2499�ber den GTK-Workaround:
2500Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html
2501Der 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.
2502*/
2503
2504SendUnicodeChar(charCode){
2505  IfWinActive,ahk_class gdkWindowToplevel
2506  {
2507    StringLower,charCode,charCode
2508    send % "^+u" . SubStr(charCode,3) . " "
2509  }else{
2510    VarSetCapacity(ki,28*2,0)
2511    EncodeInteger(&ki+0,1)
2512    EncodeInteger(&ki+6,charCode)
2513    EncodeInteger(&ki+8,4)
2514    EncodeInteger(&ki+28,1)
2515    EncodeInteger(&ki+34,charCode)
2516    EncodeInteger(&ki+36,4|2)
2517    DllCall("SendInput","UInt",2,"UInt",&ki,"Int",28)
2518  }
2519}
2520
2521EncodeInteger(ref,val){
2522  DllCall("ntdll\RtlFillMemoryUlong","Uint",ref,"Uint",4,"Uint",val)
2523}
2524/*
2525   ------------------------------------------------------
2526   BildschirmTastatur
2527   ------------------------------------------------------
2528*/
2529
2530guiErstellt = 0
2531alwaysOnTop = 1
2532
2533*F1::
2534  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2535    goto Switch1
2536  else send {blind}{F1}
2537return
2538
2539*F2::
2540  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2541    goto Switch2
2542  else send {blind}{F2}
2543return
2544
2545*F3::
2546  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2547    goto Switch3
2548  else send {blind}{F3}
2549return
2550
2551*F4::
2552  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2553    goto Switch4
2554  else send {blind}{F4}
2555return
2556
2557*F5::
2558  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2559    goto Switch5
2560  else send {blind}{F5}
2561return
2562
2563*F6::
2564  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2565    goto Switch6
2566  else send {blind}{F6}
2567return
2568
2569*F7::
2570  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2571    goto Show
2572  else send {blind}{F7}
2573return
2574
2575*F8::
2576  if(isMod4Pressed()&&zeigeBildschirmTastatur)
2577    goto ToggleAlwaysOnTop
2578  else send {blind}{F8}
2579return
2580
2581Switch1:
2582  tImage:=ResourceFolder . "\ebene1.png"
2583  goto Switch
2584Return
2585
2586Switch2:
2587  tImage := ResourceFolder . "\ebene2.png"
2588  goto Switch
2589Return
2590
2591Switch3:
2592  tImage := ResourceFolder . "\ebene3.png"
2593  goto Switch
2594Return
2595
2596Switch4:
2597  tImage := ResourceFolder . "\ebene4.png"
2598  goto Switch
2599Return
2600
2601Switch5:
2602  tImage := ResourceFolder . "\ebene5.png"
2603  goto Switch
2604Return
2605
2606Switch6:
2607  tImage := ResourceFolder . "\ebene6.png"
2608  goto Switch
2609Return
2610
2611Switch:
2612  if (guiErstellt)
2613  {
2614     if (Image = tImage)
2615        goto Close
2616     else
2617     {
2618       Image := tImage
2619       SetTimer, Refresh
2620     }
2621  }
2622  else
2623  {
2624    Image := tImage
2625    goto Show   
2626  }
2627Return
2628
2629Show:
2630  if (guiErstellt)
2631  {
2632     goto Close
2633  }
2634  else
2635  {
2636    if (Image = "")
2637    {
2638      Image := ResourceFolder . "\ebene1.png"
2639    }     
2640    yPosition := A_ScreenHeight -270
2641    Gui, Color, FFFFFF
2642    Gui, Add, Button, xm+5 gSwitch1, F1
2643    Gui, Add, Text, x+5, kleine Buchstaben
2644    Gui, Add, Button, xm+5 gSwitch2, F2
2645    Gui, Add, Text, x+5, gro�e Buchstaben
2646    Gui, Add, Button, xm+5 gSwitch3, F3
2647    Gui, Add, Text, x+5, Satz-/Sonderzeichen
2648    Gui, Add, Button, xm+5 gSwitch4, F4
2649    Gui, Add, Text, x+5, Zahlen / Steuerung
2650    Gui, Add, Button, xm+5 gSwitch5, F5
2651    Gui, Add, Text, x+5, Sprachen
2652    Gui, Add, Button, xm+5 gSwitch6, F6
2653    Gui, Add, Text, x+5, Mathesymbole
2654    Gui, Add, Button, xm+5 gShow, F7
2655    Gui, Add, Text, x+5, An /
2656    Gui, Add, Text, y+3, Aus
2657    Gui, Add, Button, x+10 y+-30 gShow, F8
2658    Gui, Add, Text, x+5, OnTop
2659    Gui, Add, Picture,AltSubmit ys w564 h200 vPicture, %Image%
2660    Gui, +AlwaysOnTop
2661    Gui, Show, y%yposition% Autosize
2662;    SetTimer, Refresh
2663    guiErstellt = 1
2664  }
2665Return
2666
2667Close:
2668  guiErstellt = 0
2669  Gui, Destroy
2670Return
2671
2672Refresh:
2673   If (Image != OldImage)
2674   {
2675      GuiControl, , Picture, %Image%
2676      OldImage := Image
2677   }
2678Return
2679
2680ToggleAlwaysOnTop:
2681    if (alwaysOnTop)
2682    {
2683      Gui, -AlwaysOnTop
2684      alwaysOnTop = 0   
2685    }
2686    else
2687    {
2688      Gui, +AlwaysOnTop
2689      alwaysOnTop = 1
2690    }
2691Return
2692
Note: See TracBrowser for help on using the browser.