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

📄 mouse_hook.cpp

📁 Visual C++程序设计技巧与实例
💻 CPP
字号:
// Mouse_Hook.cpp : Defines the initialization routines for the DLL.
//

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

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma data_seg("sharedata")
	HWND  g_hPrevWnd = NULL;
	HWND  g_hDspWnd = NULL;
	HHOOK g_hHook = NULL;
	HINSTANCE  g_hInstance = NULL;
#pragma data_seg()


static AFX_EXTENSION_MODULE Mouse_HookDLL = { 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("MOUSE_HOOK.DLL Initializing!\n");
		
		// Extension DLL one-time initialization
		if (!AfxInitExtensionModule(Mouse_HookDLL, hInstance))
			return 0;

		// Insert this DLL into the resource chain
		// NOTE: If this Extension DLL is being implicitly linked to by
		//  an MFC Regular DLL (such as an ActiveX Control)
		//  instead of an MFC application, then you will want to
		//  remove this line from DllMain and put it in a separate
		//  function exported from this Extension DLL.  The Regular DLL
		//  that uses this Extension DLL should then explicitly call that
		//  function to initialize this Extension DLL.  Otherwise,
		//  the CDynLinkLibrary object will not be attached to the
		//  Regular DLL's resource chain, and serious problems will
		//  result.

		new CDynLinkLibrary(Mouse_HookDLL);
		g_hInstance = hInstance;
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		TRACE0("MOUSE_HOOK.DLL Terminating!\n");
		// Terminate the library before destructors are called
		AfxTermExtensionModule(Mouse_HookDLL);
	}
	return 1;   // ok
}

LRESULT WINAPI MouseMessageProc(int nCode, WPARAM  wparam, LPARAM  lparam)
{
	LPMOUSEHOOKSTRUCT  pMouseHook = (MOUSEHOOKSTRUCT FAR *) lparam;
	if (nCode >= 0)
	{
		HWND  g_hTargetWnd = pMouseHook->hwnd;
		HWND  ParentWnd = g_hTargetWnd;

		//取应用程序主窗口句柄
		while(ParentWnd != NULL)
		{
			g_hTargetWnd = ParentWnd;
			ParentWnd = GetParent(g_hTargetWnd);
		}

		if (g_hTargetWnd != g_hPrevWnd)
		{
			char Caption[100];
			//取目标窗口标题
			GetWindowText(g_hTargetWnd, Caption, 100);
			if (IsWindow(g_hDspWnd))
			{
				//发送消息到显示窗口
				SendMessage(g_hDspWnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)Caption);
				//保存目标窗口
				g_hPrevWnd = g_hTargetWnd;
			}
		}
	}
	return CallNextHookEx(g_hHook,nCode,wparam,lparam);
}

CMouse_Hook::CMouse_Hook()
{
}
CMouse_Hook::~CMouse_Hook()
{
}
bool CMouse_Hook::StartHook(HWND hWnd)
{
	bool bResult = false;
	//安装钩子
	g_hHook = SetWindowsHookEx(WH_MOUSE, MouseMessageProc, g_hInstance, 0);
	if (g_hHook != NULL)
	{
		bResult = true;
	}
	//设定接收显示窗口句柄
	g_hDspWnd = hWnd;
	return bResult;
}
bool CMouse_Hook::StopHook()
{
	bool bResult = false;
	if (g_hHook != NULL)
	{
		bResult = UnhookWindowsHookEx(g_hHook);
		if (bResult)
		{
			g_hPrevWnd = NULL;
			g_hDspWnd = NULL;
			g_hHook = NULL; 
		}
	}
	return bResult;
}

⌨️ 快捷键说明

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