SetWindowsHookEx не поддерживается ни в одной версии WindowsCE (читай: для мобильных устройств). Крючки вообще не поддерживаются, на самом деле.
Однако, если вы хотите использовать недокументированные / неподдерживаемые API-интерфейсы, вы можете извлечь SetWindowsHookEx из coredll.dll и вызвать его так же, как и в правильной Windows. Вы хотите WH_KEYBOARD_LL, который немного погуглит, говорит, что 20.
Вам на самом деле потребуется извлечь указатели на следующие методы: SetWindowsHookEx , CallNextHookEx и UnhookWindowsHookEx .
Ваш код будет похож (это не проверено):
//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 для C / C ++ всегда вызывает у меня большое разочарование. Я думаю, что это скорее отражение моих привычек, чем комментарий к любым другим инструментам.