Mousehook.cpp
上传用户:qzzxgm
上传日期:2009-12-14
资源大小:1882k
文件大小:3k
- // Mousehook.cpp : Defines the initialization routines for the DLL.
- //
- #include "stdafx.h"
- #include <afxdllx.h>
- #include "Mousehook.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #pragma data_seg("mydata")
- HWND glhPrevTarWnd=NULL;//上次鼠标所指的窗口句柄
- HWND glhDisplayWnd=NULL;//显示目标窗口标题编辑框的句柄
- HHOOK glhHook=NULL;//安装的鼠标勾子句柄
- HINSTANCE glhInstance=NULL;//DLL实例句柄
- #pragma data_seg()
- LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam);
- static AFX_EXTENSION_MODULE MousehookDLL = { NULL, NULL };
- extern "C" int APIENTRY
- DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
- {
- // Remove this if you use lpReserved
- UNREFERENCED_PARAMETER(lpReserved);
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- TRACE0("MOUSEHOOK.DLL Initializing!n");
-
- // Extension DLL one-time initialization
- if (!AfxInitExtensionModule(MousehookDLL, hInstance))
- return 0;
- new CDynLinkLibrary(MousehookDLL);
- glhInstance=hInstance;//插入保存DLL实例句柄
- }
- else if (dwReason == DLL_PROCESS_DETACH)
- {
- TRACE0("MOUSEHOOK.DLL Terminating!n");
- // Terminate the library before destructors are called
- AfxTermExtensionModule(MousehookDLL);
- }
- return 1; // ok
- }
- //////////////////////////////////////////////////////////////////////
- // Cmousehook Class
- //////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- Cmousehook::Cmousehook()
- {
- }
- Cmousehook::~Cmousehook()
- {
- stophook();
- }
- BOOL Cmousehook::starthook(HWND hWnd)
- {
- //安装钩子并设定接收显示窗口句柄
- BOOL bResult=FALSE;
- glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
- if(glhHook!=NULL)
- bResult=TRUE;
- //设置显示目标窗口标题编辑框的句柄
- glhDisplayWnd=hWnd;
- return bResult;
- }
- BOOL Cmousehook::stophook()
- {
- //卸载钩子
- BOOL bResult=FALSE;
- if(glhHook)
- bResult= UnhookWindowsHookEx(glhHook);
- if(bResult)
- {
- glhPrevTarWnd=NULL;
- glhDisplayWnd=NULL;//清变量
- glhHook=NULL;
- }
- return bResult;
- }
- 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);//取应用程序主窗口句柄
- }
- 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(glhHook,nCode,wparam,lparam);//继续传递消息
- }