-
-
[求助]关于DLL中的全局共享的一点疑惑。。。
-
发表于:
2007-4-30 02:38
9671
-
DLL代码:
#include <windows.h>
HWND g_hWnd=NULL; 疑惑一 :已经做了全局变量定义
HWND hCDC=NULL;
#pragma data_seg("MySec")
HHOOK g_hKeyboard=NULL;
#pragma data_seg()
extern "C" _declspec (dllexport) void SetHook(HWND hwnd);
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_HOME==wParam)
{
if (!g_hWnd)MessageBox(NULL,"1111","2222",MB_OK); 疑问二: 这里g_hWnd总是为0
if (!hCDC)MessageBox(NULL,"122222","3333",MB_OK); 疑问二: 这里hCDC总是为0
UnhookWindowsHookEx(g_hKeyboard);
}
return 0 ;
}
void SetHook(HWND hwnd)
{
if (hwnd){
g_hWnd=hwnd; 疑问三: 这里已经传递进来了。。但上面回调函数仍为0
hCDC=hwnd; 疑问四: 这里已经传递进来了。。但上面回调函数仍为0
if (!hCDC)
{
MessageBox(NULL,"1111","2222",MB_OK);
}
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("SetHook"),GetWindowThreadProcessId(
hwnd,NULL));
// SendMessage(g_hWnd,WM_KEYDOWN,VK_NUMPAD0,0 );
}
}
用MFC写了一个调用上面DLL的程序。。主要是调用 SetHook 这个函数。。同时我传递进目标窗口的句柄。。
试图在 疑问三 和四的地方用全局变量来保存这个句柄被在 回调函数中使用。。。。
但回调函数中的 获得的句柄总是为零的。。。。。
不明白。。我已经传递进来了。。而且钩子也成功钩上线程。。但这个句柄好象都保存不到给回调函数用。。。。
各位指导下。。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!