全局钩子为什么不起作用?
DLL函数:
#include <objbase.h>
#include <windows.h>
#include <iostream>
using namespace std;
#pragma data_seg("SHARE")
int stat=0;
HHOOK hkey=NULL;
HINSTANCE hwd;
class __declspec(dllexport) Monitor{
public:
void setstat(void);
void FuncInDll(void);
void show(void);
};
void Monitor::show()
{
MessageBox(NULL,TEXT("text"),TEXT("title"),0);
}
void Monitor::setstat(void)
{
stat=1;
}
LRESULT CALLBACK hookproc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(stat==1)
{
CallNextHookEx(hkey,nCode,wParam, lParam);
}
UnhookWindowsHookEx(hkey);
return 1;
}
void Monitor::FuncInDll()
{
MessageBox(NULL,TEXT("text2"),TEXT("title3"),0);
hkey=SetWindowsHookEx(WH_CBT,
hookproc,
hwd,
0
);
MessageBox(NULL,TEXT("text3"),TEXT("title3"),0);
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved)
{
HANDLE g_hModule;
hwd=(HINSTANCE)hModule;
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hModule = (HINSTANCE)hModule;
break;
case DLL_PROCESS_DETACH:
g_hModule=NULL;
break;
}
return TRUE;
}
按钮中,给某一个按钮注册监听程序,这个按钮想实现全局钩子
void CtestDlg::OnBnClickedOk()
{
m.show();
m.FuncInDll();
}
这个FuncInDll()没起作用啊。。。跪求大神解答。。
[解决办法]
《VC++深入详解》有说勾子的章节,你看一看是怎么实现的。
http://club.topsage.com/thread-185201-1-1.html