|
这个函数在64位系统下应用没问题吧,我是初学的新手,老师要求做个spy++截取指定窗口消息的工具,我想挂钩,但是SetWindowsHookEx返回值为0,GetLastError返回值87,是参数错误,这是我DLL的代码
- // ½¨Á¢Êý¾Ý¶Î
- #pragma data_seg("HookData")
- HHOOK g_hHook = NULL; // ¹³×Ó¾ä±ú
- HINSTANCE g_hInstDLL = NULL; // Ä£¿é¾ä±ú
- #pragma data_seg()
- // ÉèÖÃÊý¾Ý¶ÎΪ¿É¶Á¿Éд¿É¹²Ïí
- #pragma comment(linker,"/SECTION:HookData,RWS")
- // Èë¿Úº¯Êý
- BOOL APIENTRY DllMain(HINSTANCE hInstDLL,
- DWORD fdwReason,
- LPVOID lpvReserved)
- {
- if(fdwReason == DLL_PROCESS_ATTACH)
- {
- g_hInstDLL = hInstDLL; // ³õʼ»¯Ä£¿é¾ä±ú
- }
- return TRUE;
- }
- // ¹³×ӻص÷º¯Êý
- LRESULT WINAPI HookProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- switch (wParam)
- {
- case WM_LBUTTONDOWN:
- MessageBox(NULL, "Êó±ê×ó¼ü°´ÏÂ", "Text", MB_OK);
- break;
- }
- // ½«Ê¼þ´«µÝµ½ÏÂÒ»¸ö¹³×Ó
- return CallNextHookEx(g_hHook, nCode, wParam, lParam);
- }
- //°²×°¹³×Ó
- extern "C" __declspec(dllexport) DWORD InstallHook(DWORD dwThread)
- {
- DWORD dwRet = 0;
- g_hHook = SetWindowsHookEx(WH_MOUSE, HookProc, g_hInstDLL, dwThread);
- if(g_hHook == NULL)
- dwRet = GetLastError();
- return dwRet;
- }
- //Ð¶ÔØ¹³×Ó
- extern "C" __declspec(dllexport) DWORD KillHook()
- {
- if(UnhookWindowsHookEx(g_hHook))
- return 0;
- else
- return GetLastError();
- }
复制代码 |
|