我在模块中使用过这个帮助器类:http://tinyurl.com/pb3vxw6我遇到了以下问题:SetWindowsHookEx总是返回零值。正如我所提到的,这个API函数没有记录。 Win CE 6.0设备是否仍支持此API函数?我应该使用其他API函数吗?如何以另一种方式实现键盘挂钩?
public void Start()
{
if (hHook != 0)
{
// Unhook the previouse one
this.Stop();
}
hookDeleg = new HookProc(HookProcedure);
// in hHook returned zero value
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, hookDeleg, GetModuleHandle(null), 0);
if (hHook == 0)
{ // Exception throwed
throw new SystemException("Failed acquiring of the hook.");
// May be better?
// Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
}
答案 0 :(得分:1)
这是程序还是DLL?你需要DLL来使键盘钩工作(并挂钩键盘你的DLL)。我应该通过hInstance而不是GetModuleHandle(null)。因此,当您挂钩键盘窗口时,实际上会调用该DLL。
答案 1 :(得分:1)
你真的不需要一个DLL,但是未经修改可能意味着没有实现。
http://www.hjgode.de/wp/2009/12/04/hooking-the-keyboard-message-queue-in-compact-framework-code/ 上面的代码在几个设备上工作。
什么是GetLastError?