; ShowKeystrokes.ahk ; Shows most keystrokes and some kind of history ; ; Version Author ; 1.01 Lars Krahl ; ; Inspired by ShowOff.ahk by Skrommel ; ; Verbesserungen in Version 1.01: ; - es werden jetzt so ziemlich alle Tasten mitgeschnitten , bis auf das NumPad ; - das Fenster kann jetzt durch Kommandozeilenparameter verschoben, vergrößert, etc. werden #SingleInstance,Force CoordMode,Mouse,Screen AutoTrim, Off Gosub,TRAYMENU fensterx=10 ; Parameter 1 fenstery=10 ; Parameter 2 fensterhoehe=50 ; Parameter 3 fensterbreite=400 ; Parameter 4 hintergrundfarbe=000000 ; Parameter 5 schriftfarbe=FFFFFF ; Parameter 6 schriftgroesse=12 ; Parameter 7 ;schriftgroesse=16 ; Parameter 7 schriftgewicht=100 ; Parameter 8 schriftart=Arial ; Parameter 9 sichtbarkeit=220 ; Parameter 10 zeitbiserstereiheaufgeschobenwird=1500 ; Parameter 11 zeitbisfensterverstecktwird=3000 ; Parameter 12 geschwindigkeittransparenz=10 ; Parameter 13, je niedriger, desto schneller wird die Transparenz verändert. 10 ist ein angenehmer Wert innererabstandlinks=5 ; Parameter 14 innererabstandoben=0 ; Parameter 15 if %0% > 0 { if %1% fensterx=%1% if %2% fenstery=%2% if %3% fensterhoehe=%3% if %4% fensterbreite=%4% if %5% hintergrundfarbe=%5% if %6% schriftfarbe=%6% if %7% schriftgroesse=%7% if %8% schriftgewicht=%8% if %9% schriftart=%9% if %10% sichtbarkeit=%10% if %11% zeitbiserstereiheaufgeschobenwird=%11% if %12% zeitbisfensterverstecktwird=%12% if %13% geschwindigkeittransparenz=%13% if %14% innererabstandlinks=%14% if %15% innererabstandoben=%15% } Gui,+Owner +AlwaysOnTop -Resize -SysMenu -MinimizeBox -MaximizeBox -Disabled -Caption +Border -ToolWindow Gui,Margin,%innererabstandlinks%,%innererabstandoben% Gui,Color,%hintergrundfarbe% Gui,Font,C%schriftfarbe% S%schriftgroesse% W%schriftgewicht%,%schriftart% Gui,Add,Text,Verstereihe,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Gui,Add,Text,Vzweitereihe,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Gui,Show,X%fensterx% Y%fenstery% W%fensterbreite% H%fensterhoehe% NoActivate,ShowKeystrokes ; WinSet, TransColor, %hintergrundfarbe%, ShowKeystrokes ; WinSet,Transparent,%sichtbarkeit%,ShowKeystrokes GoSub,INTRO ; Es folgen die überwachten Hotkeys. ; Das ~ bedeutet, die Tasten werden abgefangen _und_ durchgereicht, sonst stehen sie den anderen Programmen nicht mehr zur Verfügung. ; Das * bedeutet, das die Tasten werden bei allen gedrückten Sondertasten wie Shift, Alt, Ctrl gestartet. ; ; Man kann das sicherlich in einer Schleife viel, viel eleganter lösen, aber ich hab es nicht anhand der Codebeispiel geschafft. ~*1:: ~*2:: ~*3:: ~*4:: ~*5:: ~*6:: ~*7:: ~*8:: ~*9:: ~*0:: ~*a:: ~*b:: ~*c:: ~*d:: ~*e:: ~*f:: ~*g:: ~*h:: ~*i:: ~*j:: ~*k:: ~*l:: ~*m:: ~*n:: ~*o:: ~*p:: ~*q:: ~*r:: ~*s:: ~*t:: ~*u:: ~*v:: ~*w:: ~*x:: ~*y:: ~*z:: ~*ü:: ~*ö:: ~*ä:: ~*^:: ~*+:: ~*#:: ~*-:: ~*.:: ~*,:: ~*´:: ~*ß:: ~*Tab:: ~*F2:: ~*F3:: ~*F4:: ~*F5:: ~*F6:: ~*F7:: ~*F8:: ~*F9:: ~*F10:: ~*F11:: ~*F12:: ~*Enter:: ~*Backspace:: ~*Escape:: ~*Delete:: ~*Insert:: ~*Home:: ~*End:: ~*PgUp:: ~*PgDn:: ~*Up:: ~*Down:: ~*Left:: ~*Right:: ~*ScrollLock:: ~*CapsLock:: ~*NumLock:: ~*space:: GoSub KEYEXTRAHIEREN GoSub EINDEUTSCHEN GoSub MODIFIERHINZUFUEGEN GoSub KEYSPEICHERN GoSub FENSTERZEIGEN ; Wenn das Fenster versteckt war, spätestens jetzt wieder zeigen. SetTimer,FENSTERVERSTECKEN,Off ; Der Timer wird von ERSTEREIHEAUFZWEITESCHIEBEN gestartet. Er muss bei jeder neuen Taste beendet werden, sonst versteckt sich das Fenster versehentlich. SetTimer,ERSTEREIHEAUFZWEITESCHIEBEN,%zeitbiserstereiheaufgeschobenwird% ; nach %zeitbiserstereiheaufgeschobenwird% Millisekunden die erste auf die zweite Reihe schieben Return *F1:: erstereiheletzteeingabe= GuiControl,,erstereihe, GuiControl,,zweitereihe, Return KEYEXTRAHIEREN: pressedkey=%A_ThisHotKey% sonderzeichen=`~,`!,`+,`* ; es muessen die für AutoHotKey wichtigen Hotkey-Zeichen entfernt werden Loop Parse, sonderzeichen,`, { StringReplace, pressedkey, pressedkey, %A_LoopField% } Return KEYSPEICHERN: KeyWait, %pressedkey%, T0.01 erstereiheletzteeingabe=%erstereiheletzteeingabe%%pressedkey% ; pressedkey an die erste Reihe anhängen GuiControl,,erstereihe,%erstereiheletzteeingabe% ; und auch tatsächlich ausgeben Return ; Hier folgen die Versionen der Taste, wenn Shift gedrückt wurde. SHIFTERSETZEN: StringReplace,pressedkey,pressedkey,-,_ StringReplace,pressedkey,pressedkey,1,! StringReplace,pressedkey,pressedkey,2," StringReplace,pressedkey,pressedkey,3,§ StringReplace,pressedkey,pressedkey,4,$ StringReplace,pressedkey,pressedkey,5,`% StringReplace,pressedkey,pressedkey,6,`& StringReplace,pressedkey,pressedkey,7,/ StringReplace,pressedkey,pressedkey,8,( StringReplace,pressedkey,pressedkey,9,) StringReplace,pressedkey,pressedkey,0,= StringReplace,pressedkey,pressedkey,ß,? StringReplace,pressedkey,pressedkey,^,° StringReplace,pressedkey,pressedkey,`´,`` StringReplace,pressedkey,pressedkey,+,* StringReplace,pressedkey,pressedkey,#,' StringReplace,pressedkey,pressedkey,-,_ StringReplace,pressedkey,pressedkey,.,: StringReplace,pressedkey,pressedkey,`,,; StringReplace,pressedkey,pressedkey,<,> StringUpper,pressedkey,pressedkey Return ALTGRERSETZEN: ; leider wird AltGr als Alt+Strg angesehen (was ja eigtl. richtig ist, aber unschön aussieht) ; deshalb schneiden wir [Strg+] weg StringTrimLeft,pressedkey,pressedkey,7 StringReplace,pressedkey,pressedkey,2,² StringReplace,pressedkey,pressedkey,3,³ StringReplace,pressedkey,pressedkey,7,{ StringReplace,pressedkey,pressedkey,8,[ StringReplace,pressedkey,pressedkey,9,] StringReplace,pressedkey,pressedkey,0,} StringReplace,pressedkey,pressedkey,ß,\ StringReplace,pressedkey,pressedkey,+,~ StringReplace,pressedkey,pressedkey,q,@ StringReplace,pressedkey,pressedkey,e,€ If pressedkey not contains ²,³,{,[,],},\,~,@,€ { pressedkey=[AltGr+]%pressedkey% } Return EINDEUTSCHEN: StringReplace,pressedkey,pressedkey,Backspace,Rueck StringReplace,pressedkey,pressedkey,space,Leer StringReplace,pressedkey,pressedkey,Escape,Esc StringReplace,pressedkey,pressedkey,Delete,Entf StringReplace,pressedkey,pressedkey,Insert,Einfg StringReplace,pressedkey,pressedkey,Home,Pos1 StringReplace,pressedkey,pressedkey,End,Ende StringReplace,pressedkey,pressedkey,PgDn,BildR StringReplace,pressedkey,pressedkey,PgUp,BildH StringReplace,pressedkey,pressedkey,Up,Hoch StringReplace,pressedkey,pressedkey,Down,Runter StringReplace,pressedkey,pressedkey,Left,Links StringReplace,pressedkey,pressedkey,Right,Rechts Return MODIFIERHINZUFUEGEN: besonderetasten=Tab,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,Enter,Rueck,Esc,Einfg,Entf,Pos1,Ende,BildH,BildR,Hoch,Runter,Links,Rechts,ScrollLock,CapsLock,NumLock,Leer Loop Parse, besonderetasten,`, { StringReplace,pressedkey,pressedkey,%A_LoopField%,[%A_LoopField%] ; Enter wird zu [Enter] } GetKeyState, state, Shift ; Wurde Shift gedrückt? if state = D GoSub,SHIFTERSETZEN ; also brauchen wir die große Version des Buchstabens GetKeyState, state, Ctrl ; Wurde Strg gedrückt? if state = D pressedkey=[Strg+]%pressedkey% ; wenn ja, vorne anstellen GetKeyState, state, LAlt ; Wurde das linke Alt gedrückt? if state = D pressedkey=[Alt+]%pressedkey% GetKeyState, state, RAlt ; Wurde das rechte Alt(Gr) gedrückt? if state = D { GoSub,ALTGRERSETZEN } WinKeys = LWin,RWin Loop Parse, Winkeys, `, { GetKeyState, state, %A_LoopField% if state = D pressedkey=[Win+]%pressedkey% } Return ERSTEREIHEAUFZWEITESCHIEBEN: GuiControl,,erstereihe, ; erstereihe leeren GuiControl,,zweitereihe,%erstereiheletzteeingabe% ; und auf zweite schieben erstereiheletzteeingabe= SetTimer,ERSTEREIHEAUFZWEITESCHIEBEN,Off ; Der Timer soll natürlich nicht mehrmals direkt hintereinander aufgerufen werden, also wird er beim ersten Mal gestoppt SetTimer,FENSTERVERSTECKEN,%zeitbisfensterverstecktwird% Return FENSTERVERSTECKEN: SetTimer,FENSTERVERSTECKEN,Off ; Timer stoppen, damit er nicht mehrmals direkt hintereinander aufgerufen wird ; Loop ; { ; if sichtbarkeit < 0 ; break ; WinSet,Transparent,%sichtbarkeit%,ShowKeystrokes ; sleep %geschwindigkeittransparenz% ; sichtbarkeit -= 20 ; } Return FENSTERZEIGEN: ; Loop ; { ; if sichtbarkeit > 210 ; break ; WinSet,Transparent,%sichtbarkeit%,ShowKeystrokes ; sleep %geschwindigkeittransparenz% ; sichtbarkeit += 20 ; } Return INTRO: GuiControl,,erstereihe,Willkommen bei ShowKeystrokes GuiControl,,zweitereihe,Lars Krahl, 2007, made with AutoHotKey SetTimer,FENSTERVERSTECKEN,%zeitbisfensterverstecktwird% Return TRAYMENU: ; gigantisches Menü für das Tray-Icon Menu,Tray,NoStandard Menu,Tray,Add,&Beenden,QUIT Return QUIT: GuiClose: ExitApp