2009-06-26 45 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