WINCE 上不支持直接调用HOOK,只能取函数的地址.原因暂时不说
#define WH_KEYBOARD_LL 20 /* Windows - 14; Windows CE - 20 */
#define HC_ACTION 0 /* Windows - in winuser.h */
typedef LRESULT (CALLBACK* HOOKPROC)(int nCode, WPARAM wParam, LPARAM lParam);
typedef HHOOK (WINAPI *_SetWindowsHookExW)(int, HOOKPROC, HINSTANCE, DWORD);
typedef LRESULT (WINAPI *_CallNextHookEx)(HHOOK, int, WPARAM, LPARAM);
typedef LRESULT (WINAPI *_UnhookWindowsHookEx)(HHOOK);
static _SetWindowsHookExW SetWindowsHookEx;
static _UnhookWindowsHookEx UnhookWindowsHookEx;
static _CallNextHookEx CallNextHookEx;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
if (g_hHookApiDLL = LoadLibrary(_T("coredll.dll")))
{
SetWindowsHookEx = (_SetWindowsHookExW)GetProcAddress(g_hHookApiDLL, _T("SetWindowsHookExW"));
UnhookWindowsHookEx = (_UnhookWindowsHookEx)GetProcAddress(g_hHookApiDLL, _T("UnhookWindowsHookEx"));
CallNextHookEx = (_CallNextHookEx)GetProcAddress(g_hHookApiDLL, _T("CallNextHookEx"));
if ( SetWindowsHookEx == NULL
|| UnhookWindowsHookEx == NULL
|| CallNextHookEx == NULL)
{
// AfxMessageBox(L"failed!");
return FALSE;
}
}
else
{
//AfxMessageBox(L"Null . failed! ");
return FALSE;
}
//AfxMessageBox(L"OK! ");
return 0;
}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
int a = 12;
return 0;
}