给dll中的变量赋值的问题
下面这段代码的主体来自NowCan的网站,我做了一些修改。
我本来想将自己程序主窗口的句柄通过SetWinHandle函数赋给系统级的共享变量WinHandle,可是这样做不成功。SendMessage函数没有将消息发送到我的程序的窗口过程。如果将CBTProc中注释掉的几句加上去,程序是OK的。
我这样赋值有问题吗?
应该怎么改动呢?
#pragma option -zRSHSEG // 改变缺省数据段名
#pragma option -zTSHCLASS // 改变缺省数据类名
#include <windows.h>
#pragma argsused
// 以下都将是共享区内存变量
HHOOK NewHook=NULL; // 存放新钩子句柄
int LoadCount=0; // DLL装入次数计数
HINSTANCE DllHinst=NULL;
HWND g_hWnd=NULL,WinHandle=NULL;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if(DllHinst==NULL)
DllHinst=hinst;
if(reason==DLL_PROCESS_ATTACH) // DLL入口
LoadCount+=1; // 装入计数
else if(reason==DLL_PROCESS_DETACH) // DLL出口处理
LoadCount-=1;
return 1;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0) // do not process message
return CallNextHookEx(NewHook, nCode, wParam,lParam);
switch (nCode)
{
case HCBT_ACTIVATE:
//HWND hwnd = FindWindow(NULL,"Shooter");
//if(hwnd !=NULL)
// WinHandle = hwnd;
SendMessage(WinHandle,0x8888,wParam,lParam);//wParam is handle to about to active window
}
return CallNextHookEx(NewHook, nCode, wParam,lParam);
}
extern "C" __declspec(dllexport)
void SetWinHandle(HWND &Winhwnd) // DLL导出函数SetWinHandle()
{
WinHandle = Winhwnd;
}
extern "C" __declspec(dllexport)
void EnableHook() // 导出函数EnableHook()
{
if (NewHook==NULL) // 安装新钩子
NewHook=SetWindowsHookEx(WH_CBT,(HOOKPROC)CBTProc,DllHinst,0);
}
extern "C" __declspec(dllexport)
void DisableHook() // 导出函数DisableHook()
{
if (NewHook!=NULL)
{
UnhookWindowsHookEx(NewHook);
NewHook=NULL; // 卸掉新钩子
}
}