⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mousehook.cpp

📁 截获鼠标移开事件的VC例子
💻 CPP
字号:
// 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);//继续传递消息
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -