return 1; // ok
}
这个函数最重要的部分是调用AfxInitExtensionModule(),它初始化DLL 并在MFC 框架
中正确地工作。它需要传递给DllMain()的DLL 实例句柄和AFX_EXTENSION_MODULE 结
构,结构中存在着对MFC 有用的信息。
加载和卸载鼠标全局钩子的函数接口定义如下:
BOOL __stdcall StartHook(HWND hWnd)
{ //install hoook
hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0);
//mouse hook
if(hMouseHook)
{
glhDisplayWnd=hWnd; //设置显示目标窗口标题编辑框的句柄
return TRUE;
}
return FALSE;
}
BOOL __stdcall StopHook()
{ //unstall hook
BOOL mHook=UnhookWindowsHookEx(hMouseHook);
if(mHook)
return TRUE;
return FALSE;
}
钩子函数的具体实现代码如下:
LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
{
LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lparam;
if (nCode>=0)
{
HWND glhTargetWnd=pMouseHook->hwnd; //取目标窗口句柄
HWND ParentWnd=glhTargetWnd;
while (ParentWnd !=NULL)
{
glhTargetWnd=ParentWnd;
ParentWnd=GetParent(glhTargetWnd); //取应用程序主窗口句柄
}
枫叶文学网www.fywxw.com
第10 章 动态链接库
·277·
if(glhTargetWnd!=glhPrevTarWnd)
{
char szCaption[100];
GetWindowText(glhTargetWnd,szCaption,100); //取目标窗口标题
if(IsWindow(glhDisplayWnd))
SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);
glhPrevTarWnd=glhTargetWnd; //保存目标窗口
}
}
return CallNextHookEx(g