Недавно сделал это для моего проекта. Отлично работает )
Я почти уверен, что речь идет о 2-м и 3-м аргументах.
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 для третьего аргумента:
IntPtr hInstance = GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);
3 Будьте осторожны с Marshal.GetLastWin32Error (), вы должны использовать его строго после метода, который вы проверяете на наличие ошибок. ( см. Это правило fxcop )
вся картинка выглядит следующим образом:
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
}
вот и все)