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

📄 mousehook.cpp

📁 VC.net 的一些有用的技巧
💻 CPP
字号:
// MouseHook.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include <afxdllx.h>
#include "MouseHook.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#pragma data_seg("mydata")
	HWND glhPrevTarWnd=NULL;//上次鼠标所指的窗口句柄
	HWND glhDisplayWnd=NULL;//显示目标窗口标题编辑框的句柄
	HHOOK glhHook=NULL;//安装的鼠标勾子句柄 
	HINSTANCE glhInstance=NULL;//DLL实例句柄
#pragma data_seg()

static AFX_EXTENSION_MODULE MouseHookDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	// 如果使用 lpReserved,请将此移除
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		TRACE0("MouseHook.DLL 正在初始化!\n");
		
		// 扩展 DLL 一次性初始化
		if (!AfxInitExtensionModule(MouseHookDLL, hInstance))
			return 0;

		// 将此 DLL 插入到资源链中
		// 注意:如果此扩展 DLL 由
		//  MFC 规则 DLL(如 ActiveX 控件)隐式链接到
		//  而不是由 MFC 应用程序链接到,则需要
		//  将此行从 DllMain 中移除并将其放置在一个
		//  从此扩展 DLL 导出的单独的函数中。使用此扩展 DLL 的
		//  规则 DLL 然后应显式
		//  调用该函数以初始化此扩展 DLL。否则,
		//  CDynLinkLibrary 对象不会附加到
		//  规则 DLL 的资源链,并将导致严重的
		//  问题。

		new CDynLinkLibrary(MouseHookDLL);
		glhInstance=hInstance;//插入保存DLL实例句柄
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		TRACE0("MouseHook.DLL 正在终止!\n");

		// 在调用析构函数之前终止该库
		AfxTermExtensionModule(MouseHookDLL);
	}
	return 1;   // 确定
}

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 + -