을 사용하여 키가 눌려 졌는지 감지하는 방법 그래서 키로거를 만들려고하고 있으므로 이렇게 입력하기 위해 입력 한 마지막 문자를 가져와야합니다. 지금까지 나는 SetWindowsHookEx()를 사용하려고 노력했지만 hasnt는 작동하고 콜백 함수를 만들었고 모든 것이 누군가 나를 도와 줄 수 있습니까? 어떤 도움을 주신 경우VC++
VC++
답변
SetWindowsHookEx를 사용하면 올바른 길을 찾을 수 있습니다. WH_GETMESSAGE, WH_MSGFILTER, WH_KEYBOARD 또는 WH_KEYBOARD_LL 중 하나를 사용할 수 있습니다 어느 필요에 따라 달라집니다. WH_KEYBOARD 훅은 훅으로 된 윈도우로 보내지는 WM_KEYDOWN 또는 WM_KEYUP 메시지가있을 때마다 콜백 함수를 호출합니다. WH_KEYBOARD_LL 후크는 비동기 키 상태가 변경되기 전에 콜백을 호출합니다. 여기 좀 걸릴 수 있습니다 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v=vs.85).aspx 및 https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
당신은 시스템 전체 후크를 만들어야합니다, 그건 당신이 DLL로 콜백 함수를 구현해야하는 이유. hHook는 프로세스간에 공유 변수로 정의 된 방법
#pragma data_seg (".HookSection")
HHOOK hHook = NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.HookSection,RWS")
HINSTANCE hDLL = NULL;
InstallHook()
{
hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, hDLL, 0);
}
UninstallHook()
{
UnhookWindowsHookEx(hHook);
}
에주의 : dll을 내부 당신은 follwing을 가질 수 있습니다. hDll은 DllMain 함수에서받는 dll hInstance입니다.
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0) // do not process message
return CallNextHookEx(hHook, nCode,
wParam, lParam);
// The wParam is the Virtual Key code of the button being pressed or released.
// You can use it for your logging purposes
// In order to determine if the key was pressed or released you need to examine the lParam bits as described here: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v=vs.85).aspx
// If you need to check the state of Shift, Alt, Ctrl then you need to use GetAsyncKeyState function
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
다음 단계는 (콘솔 응용 프로그램이 될 수 있음) EXE 파일을 만드는 것입니다 다음과 같이 WH_KEYBOARD 훅에 대한
콜백 함수를 정의 할 수 있습니다. 로깅을 시작/중지해야 할 때 InstallHook 및 UninstallHook 함수가 호출됩니다.
WH_KEYBOARD를 사용하여 예제를 제공했지만 WH_GETMESSAGE 또는 WH_MSGFILTER 후크로 시도 할 수도 있습니다. WH_GETMESSAGE의 경우 콜백은 다음과 같이 정의한다 :
LRESULT CALLBACK GetMsgProc(_In_ int code, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
if (nCode < 0) // do not process message
return CallNextHookEx(hHook, nCode, wParam, lParam);
switch (nCode)
{
case HC_ACTION:
// You can examine the lParam by casting it to PMSG, like this:
PMSG p = (PMSG)lParam;
// If p->message is WM_KEYDOWN
// the virtual keycode will be written in p->wParam
// If you need to check the state of Shift, Alt, Ctrl then you need to use GetAsyncKeyState function
break;
case PM_NOREMOVE:
break;
default:
break;
}
//
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
http://stackoverflow.com/questions/6897058/runtime-keypress-detection-in-a-console-application –
에서 도와 didnt는 그 모든 – sharpchain