wondayer 发表于 2014-2-7 21:40:12

求助SetWindowsHookEx总是参数错误

这个函数在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();
}

马大哈 发表于 2014-7-14 21:43:28

这个..............帮顶一下
页: [1]
查看完整版本: 求助SetWindowsHookEx总是参数错误