VC++

2016-09-23 10 views
0

을 사용하여 키가 눌려 졌는지 감지하는 방법 그래서 키로거를 만들려고하고 있으므로 이렇게 입력하기 위해 입력 한 마지막 문자를 가져와야합니다. 지금까지 나는 SetWindowsHookEx()를 사용하려고 노력했지만 hasnt는 작동하고 콜백 함수를 만들었고 모든 것이 누군가 나를 도와 줄 수 있습니까? 어떤 도움을 주신 경우VC++

+0

http://stackoverflow.com/questions/6897058/runtime-keypress-detection-in-a-console-application –

+0

에서 도와 didnt는 그 모든 – sharpchain

답변

0

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).aspxhttps://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); 

}