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

📄 mousehook.cpp

📁 visual c++网络通信程序开发指南附带的程序所有的源码。
💻 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;   

	// 安装的鼠标钩子句柄
	HWND glhHook = NULL;         
	
	// DLL实例句柄
	HINSTANCE glhInstance = NULL;
#pragma data_seg()

static AFX_EXTENSION_MODULE MouseHookDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
	UNREFERENCED_PARAMETER(lpReserved);

	if (dwReason == DLL_PROCESS_ATTACH)
	{
		if (!AfxInitExtensionModule(MouseHookDLL, hInstance))
			return 0;
		new CDynLinkLibrary(MouseHookDLL);
		glhInstance=hInstance;
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		AfxTermExtensionModule(MouseHookDLL);
	}
	return 1;   // ok
}

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((HHOOK)glhHook, nCode, wParam, lParam); 
}

CMouseHook::CMouseHook()
{
}

CMouseHook::~CMouseHook()
{
	StopHook();
}

BOOL CMouseHook::StartHook(HWND hWnd)
{
	BOOL result = FALSE;

	// 安装钩子
	glhHook = (HWND)SetWindowsHookEx(WH_MOUSE, MouseProc, glhInstance, 0);
	if (glhHook != NULL)
		result = TRUE;
	
	// 设置显示目标窗口标题编辑框的句柄 
	glhDisplayWnd = hWnd;
	
	return result;
}

BOOL CMouseHook::StopHook()
{
	BOOL result = FALSE;
	
	if (glhHook)
	{
		// 卸载钩子
		result = UnhookWindowsHookEx((HHOOK)glhHook);
		if (result)
		{
			glhDisplayWnd = NULL;
			glhPrevTarWnd = NULL;
			glhHook = NULL;
		}
	}

	return result;
}

⌨️ 快捷键说明

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