2009-06-26 17 views

回答

1

SetWindowsHookEx在任何WindowsCE(读取:Mobile)版本上都不受支持。事实上,钩子通常不被支持。

但是,如果您愿意使用无文档/不受支持的API,则可以将SetWindowsHookEx从coredll.dll中取出,并在适当的Windows上调用它。你想WH_KEYBOARD_LL,这一点谷歌搜索说是20

实际上需要拔出指针,以下列方法:SetWindowsHookExCallNextHookExUnhookWindowsHookEx

您的代码将类似于(这是未经测试):

//myHook.dll 
LRESULT myLowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    //You'll need to pull a reference to CallNextHookEx out of coredll as well 
    if(nCode < 0) return CallNextHookEx(nCode, wParam, lParam); 

    KBDLLHOOKSTRUCT data = *((PKBDLLHOOKSTRUCT)lParam); 

    //Do something with data 

    return CallNextHookEx(nCode, wParam, lParam); 
} 

//Main Code, which ignores all the nasty function pointers you'd ACTUALLY have to use to do this 
... 
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, pMyLowLevelKeyboardProc, hMyHookDll, 0); 
... 
//Some point in the future 
UnhookWindowsHookEx(hook); 

我会强烈建议反对这种但是。我非常怀疑这个代码将继续适用于所有未来版本的Windows Mobile。考虑一些其他的方法来实现你实际上的任何事情。

我不能说我对免费的编译器或IDE有任何建议。除了Visual Studio for C/C++之外的任何东西总是让我感到非常沮丧。我认为这更多反映了我的习惯,而不是其他工具的评论。

+0

我可以在c#和本地dll调用中使用它吗? – StoneHeart 2009-06-30 06:23:50