2009-10-22 6 views
0

한숨에, 글로벌 키보드 및 마우스 이벤트를 후킹하는 codeproject (http://www.codeproject.com/KB/cs/globalhook.aspx)의 코드가 있습니다. 갑자기 지금은이 코드에서 비주얼 스튜디오 2010과 닷넷 프레임 워크 4.0 내가 휴식의 베타 2 설치시 :베타 2 x64에서 SetWindowsHookEx가 실패했습니다.

  hKeyboardHook = SetWindowsHookEx(
       WH_KEYBOARD_LL, 
       KeyboardHookProcedure, 
       Marshal.GetHINSTANCE(
       Assembly.GetExecutingAssembly().GetModules()[0]), 
       0); 

아, 그리고 내가 X64 시스템에서 실행하고 있습니다. 누구든지이 문제를 해결할 방법을 알고 있습니까? 내가 아는 쉬운 수정이 아닙니다.

+0

휴식 = 충돌 또는 NULL 후크 또는 ...? – popester

+0

위의 코드에서 컴파일러 오류가 발생합니까? 이게 뭐야? –

+0

오류 자체가 아니라 hKeyboardHook이 0으로 설정되고 Marshal.GetLastWin32Error(); 또 다른 사용자가 "오류 코드 # 87 (-2147467259)이 Win32Exception에 전달되고"매개 변수가 잘못되었습니다 "오류가 발생하여 오류가 발생합니다." 그러나 나는 호기심이 없다 : / – Homde

답변

0

최근에 내 프로젝트에서이 작업을 수행했습니다. 그것은 매력처럼 작동합니다.) 거의 두 번째와 세 번째 주장에 관한 것입니다. 이 같은

1 랩 KeyboardHookProcedure() :

//declate delegate type: 
public delegate int HookProc(int nCode, int wParam, IntPtr lParam); 

//use a class member of this type and inject your callback into 
m_hookproc = new HookProc(HookCallbackProcedure); 

2 3 인수 :

IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName); 

3 당신이 엄격 방법 후 사용해야합니다) (Marshal.GetLastWin32Error에주의하면 오류를 확인하십시오. (see this fxcop rule)

전체 그림은 다음과 같습니다

IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName); 
IntPtr handle = SetWindowsHookEx( WH_KEYBOARD_LL, m_hookproc, hInstance, 0); 
if (handle == IntPtr.Zero) 
{ 
    int error = Marshal.GetLastWin32Error(); 
    //log the error or whatever 
} 

은 그래서 0이 XP에서 필요로 보인다 모든)

0

는 Instance 매개 변수를 남겨이지만, WIN7 나던.

hKeyboardHook = SetWindowsHookEx(
       WH_KEYBOARD_LL, 
       KeyboardHookProcedure, 
       0, 
       0); 
관련 문제