以下是程序DLL的程序全文, 钩子创建成功, 但是回调函数始终没有被调用。
(共享数据应该是对的, 我测试了开2个程序的时候其值有相应的变化关系)#include "stdafx.h"
#pragma data_seg("shareddata")
HHOOK g_hLogHook=NULL;
HINSTANCE g_hInst = NULL;
#pragma data_seg() BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hInst = (HINSTANCE)hModule;
return TRUE;
}extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyHookProc(int iCode,WPARAM wParam,LPARAM lParam)
{
::MessageBox(0, "", "", 0);
return CallNextHookEx((HHOOK)g_hLogHook,iCode,wParam,lParam);
} extern "C" __declspec(dllexport)
void KeyProcInstall()
{
char szFileName[256];
GetModuleFileName(g_hInst, szFileName, 256);
if(g_hLogHook==NULL)
g_hLogHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyHookProc,g_hInst,0);
} extern "C" __declspec(dllexport)
void KeyProcUnInstall()
{
if(g_hLogHook!=NULL)
{
UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
}
}
(共享数据应该是对的, 我测试了开2个程序的时候其值有相应的变化关系)#include "stdafx.h"
#pragma data_seg("shareddata")
HHOOK g_hLogHook=NULL;
HINSTANCE g_hInst = NULL;
#pragma data_seg() BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hInst = (HINSTANCE)hModule;
return TRUE;
}extern "C" __declspec(dllexport)
LRESULT CALLBACK KeyHookProc(int iCode,WPARAM wParam,LPARAM lParam)
{
::MessageBox(0, "", "", 0);
return CallNextHookEx((HHOOK)g_hLogHook,iCode,wParam,lParam);
} extern "C" __declspec(dllexport)
void KeyProcInstall()
{
char szFileName[256];
GetModuleFileName(g_hInst, szFileName, 256);
if(g_hLogHook==NULL)
g_hLogHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyHookProc,g_hInst,0);
} extern "C" __declspec(dllexport)
void KeyProcUnInstall()
{
if(g_hLogHook!=NULL)
{
UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
}
}
我的EMAIL:[email protected]
请注明ID, 再谢!
但是做成简单的WIN32模式DLL就不能达到效果, 这是什么原因啊?
请高手详解。