2012-11-02 3 views
0

저는 C#에서 가상 키보드로 정렬 할 수있는 빠른 도구를 작성하고 있습니다. 현재 SendKeys을 사용 중입니다. Keyloggers가 열쇠를 붙잡을 지 알고 싶기 때문에 this code을 찾았지만 mfc가 설치되어 있지 않아서 컴파일 할 수없고 실행도 안됩니다.글로벌 키보드 후크 스파이?

Keyloggers로 SendKeys를 기록한 경우 키를 어떻게 만들 수 있습니까? 내 코드를 테스트하기 위해 단일 exe에서 실행되는 코드 (아래의 스 니펫)?

#include <Windows.h> 

static UINT uMsg = 0; 
static HWND hWndMain = 0; 
static HHOOK hKeyHook = NULL ; 
#pragma data_seg() 

HINSTANCE hInstance = 0; 
HOOKPROC lpfnHookProc = 0; 

LRESULT __stdcall KeyboardFunc (int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    BOOL bPassToChain; 
    char szDebug [100]; 

    // Check for exception cases... 
    if (nCode < 0) 
     return (CallNextHookEx (hKeyHook, nCode, wParam, lParam)); 
    if (nCode == HC_NOREMOVE) 
     return (CallNextHookEx (hKeyHook, nCode, wParam, lParam)); 

    switch (wParam) 
    { 
     case VK_F2: 
      wsprintf (szDebug, "F2 key message, lparam = 0x%X\n", lParam); 
      OutputDebugString (szDebug); 

      // only send on keydown, not keyup (autorepeat) 
      if (HIWORD (lParam) & 0xC000) 
      { 
       OutputDebugString ("F2 Keyup\n"); 
      } 
      else 
      { 
       wsprintf (szDebug, "Sending F2 keydown message %d to hwnd 0x%X\n", 
         uMsg, hWndMain); 
       OutputDebugString (szDebug); 
       PostMessage (hWndMain, uMsg, 0, 0); 
      } 
      bPassToChain = FALSE; 
      break; 

     default : 
      bPassToChain = TRUE ; 
      break ; 
    } 

    if (bPassToChain) 
     return (CallNextHookEx (hKeyHook, nCode, wParam, lParam)); 
    else 
     return TRUE ; // We have processed this key 
} 

BOOL __stdcall InstallExampleKeyboardHook (HWND hWnd, UINT uMyMsg) 
{ 
    hWndMain = hWnd ; 
    uMsg  = uMyMsg; 
    lpfnHookProc = (HOOKPROC) KeyboardFunc ; 
    hKeyHook = SetWindowsHookEx (WH_KEYBOARD, lpfnHookProc, hInstance, NULL); 

    if (hKeyHook) 
     return TRUE ; 
    else 
     return FALSE ; 
} 

답변

0

MFC에 관한 것이 아닙니다. 직접적인 네이티브 C++ 코드. Visual Studio가 있으면 빠른 콘솔 C++ 응용 프로그램을 만들고 해당 코드를 복사하여 붙여 넣은 다음 컴파일하고 테스트 할 수 있어야합니다. 그렇지 않다면 무료이지만 큰 Windows SDK를 다운로드하십시오. 덜 친숙한 VS,하지만 컴파일러가 있으므로 올바른 방향으로 가야합니다.

낮은 수준의 후크는 디버거와 잘 맞지 않으므로 유용한 문을 추적하거나 로그 아웃해야 할 수 있습니다. 편집

: 나는/그것을 붙여 복사 이유는 그게 너무 직선 C++를 알고

HookModule = LoadLibrary(ModulePath); 

HookProc HookFunction = GetProcAddress(HookModule, "GetMessageCallBack"); 

GetMessageHookHandle = SetWindowsHookEx(HookType.WH_GETMESSAGE, HookFunction, HookModule, 0); 
+0

: 모듈 핸들을 얻을, 당신은 이런 식으로 뭔가가 필요합니다. 그러나 나는 어떤 msg 이벤트도 얻지 못한다 :/ –

+0

글쎄, SetWindowsHookEx를 사용하는 LL 키보드 후크 어플리케이션을 작성한 적이 있었고 완벽하게 디버거가되었다. 그냥 VS 디버거에서 실행하고 KeyboardFunc에 중단 점을 넣어 - 아무 문제가 작동합니다. –

+0

@ acidzombie24의 경우, 메시지 루프가있는 WinMain이 필요합니다. 그렇지 않으면 프로그램을 시작한 후에 프로그램이 immediaelly를 종료하기 때문입니다. –

관련 문제