root/windows/autohotkey/neo20.ahk @ 807

Revision 807, 69.2 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.

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