大家来看看这段程序
以下我写的一个dll
// TestDll.cpp : Defines the entry point for the DLL application.
//
#include <windows.h>
HINSTANCE g_hInstance;
HHOOK g_hHook;
LRESULT CALLBACK GetHookProc(int nCode,WPARAM wParam,LPARAM lParam);
BOOL WINAPI DllEntryPoint( HINSTANCE hDLL,
DWORD dwReason,
LPVOID Reserved
)
{
g_hInstance=hDLL;
return TRUE;
}
int ShowMe(void)
{
MessageBox(NULL,"i love you","hi",MB_OK);
return 1;
}
void Start()
{
//安装全局钩子
g_hHook=SetWindowsHookEx(WH_GETMESSAGE,GetHookProc,g_hInstance,NULL);
MessageBox(NULL,"this is the world start","hi",MB_OK);
}
LRESULT CALLBACK GetHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
HWND hwndTarget;
char strGetText[5000]="";
MSG *pMessage=(MSG *)lParam;
if(nCode<0)
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
else
{
/////////////////////////////////////////////////
if(pMessage->message==WM_KEYDOWN)
{
if (pMessage->wParam==VK_F8)
{
MessageBox(NULL,"get F8 key down","hi",MB_OK);
}
}
return CallNextHookEx(g_hHook,nCode,wParam,lParam);
}
}
以下是调用Testdll.dll:
HINSTANCE gLibSample=NULL;
typedef int(*SHOWME)(void);
typedef void(*START)(void);
SHOWME ShowMe;
START Start;
HCURSOR CAaDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAaDlg::OnButton1()
{
// TODO: Add your control notification handler code here
gLibSample=LoadLibrary("TESTDLL.DLL");
//ShowMe = (SHOWME)GetProcAddress(gLibSample,"ShowMe");
//ShowMe();
Start=(START)GetProcAddress(gLibSample,"Start");
Start();
FreeLibrary(gLibSample);
}
编译的时候没有问题,执行OnButton1()后出现以下情况:
出现非法操作,但是也出现了“this is the world start”提示框,然后就蓝屏死机了。
我想是安装钩子的函数有问题。我是在工程列表中选择Win32 Dynamic-Link Library->a simple dll project创建该dll的,以前我用mfc dll向导也写过一个钩子,内容和上面的基本相同,却运行得很好,哪位高人能告诉我这是这么回事吗?
问题点数:80、回复次数:10Top
1 楼Jneu(沧海桑田)回复于 2001-09-28 10:33:36 得分 0
gzTop
2 楼karma(无为MS MVP)回复于 2001-09-28 10:34:44 得分 30
you forget to call
UnhookWindowsHookEx( g_hHook );Top
3 楼haven(阿天)回复于 2001-09-28 10:41:20 得分 0
一定要有UnhookWindowsHookEx( g_hHook )才行吗?
我想即使没有函数调用UnhookWindowsHookEx( g_hHook )钩子也能正常工作呀。Top
4 楼haven(阿天)回复于 2001-09-28 10:48:05 得分 0
up一下Top
5 楼haven(阿天)回复于 2001-09-28 11:01:22 得分 0
再up一下Top
6 楼xiner(叉叉)回复于 2001-09-28 11:12:38 得分 50
你太残忍了,人家刚启动hook,还没unhook你就freelibrary。明摆着让我下不了台吗。我不给你篮屏才怪呢--------your computer.记得freelibrary在unhook之后。Top
7 楼Julienjut(秋水)回复于 2001-09-28 11:15:12 得分 0
下午不看Top
8 楼GloomyCoder(哥们,搞根烟抽,咱俩一起郁闷!)回复于 2001-09-28 11:49:31 得分 0
好好学习,天天向上Top
9 楼haven(阿天)回复于 2001-09-28 12:03:27 得分 0
我知道了,原来是这样呀,好了给分Top
10 楼Gu_c_h(Gu)回复于 2001-09-28 12:48:47 得分 0
把 DllEntryPoint 改为 DllMain 就好了Top




