SetWindowHookEx問題
建立一個WIN32 DLL,調用時發現鉤子沒效,檢查時發現跑到SetWindowHookEx出錯,請各位指教
調用函數採用CreateRemoteThread的WIN32 Console Application
代碼如下
======================================================
#include "stdafx.h"
//設置共享代碼段
#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
#pragma data_seg()
BOOL APIENTRY DllMain( HANDLE hModule, DWORD reason, LPVOID lpReserved)
{
switch(reason)
{
case DLL_PROCESS_ATTACH:
// MessageBox(NULL,"TEST SUCESS","REMOTE",MB_OK);
InstallHook();
break;
case DLL_PROCESS_DETACH:
UninstallHook();
break;
default:
break;
}
return TRUE;
}
BOOL InstallHook()
{
MessageBox(NULL,"InstallHook","Hook",MB_OK); //成功調用,顯示對話框
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,0,0);
return TRUE;
}
BOOL UninstallHook()
{
UnhookWindowsHookEx(hkb);
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
MessageBox(NULL,"KeyBoard","Hook",MB_OK);//這裡調用失敗,沒有顯示對話框
if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
{
switch(wParam)
{
case '1':MessageBox(NULL,"Press 1","Hook",MB_OK);break;
case '2':MessageBox(NULL,"Press 2","Hook",MB_OK);break;
case '3':MessageBox(NULL,"Press 3","Hook",MB_OK);break;
default:
break;
}
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}