处理SetWindowsHookEx零返回值

时间:2014-02-17 13:50:01

标签: c# winapi compact-framework windows-ce keyboard-hook

我在模块中使用过这个帮助器类: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());

    }
}

2 个答案:

答案 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?