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

📄 mousedll.cpp

📁 Windows XP/2000/NT 中扫雷的外挂程序
💻 CPP
字号:
// MouseDll.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")
HHOOK glhMouseHook = NULL;			//安装的鼠标勾子句柄
HHOOK glhKeyBoardHook = NULL;		//安装键盘勾子句柄
HINSTANCE glhInstance = NULL;		//DLL实例句柄
HWND glMainWin = NULL;
TCHAR winMineClassName[] = "扫雷";
#pragma data_seg()
#pragma comment(linker, "/SECTION:.myData,rws")

struct MsgMouse
{
	CPoint pt;
	int KeyValue;
};

LRESULT WINAPI MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT WINAPI KeyBoardProc(int nCode, WPARAM wParam, LPARAM lParam);

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

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

//////////////////////////////////////////////////////////////////////
// CMouseHook Class
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMouseHook::CMouseHook()
{

}

CMouseHook::~CMouseHook()
{
	StopMouseHook();
	StopKeyBoardHook();
}

BOOL CMouseHook::StartMouseHook(HWND hwnd)
{
	if (glhMouseHook) return TRUE;

	BOOL bResult = FALSE;
	glhMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, glhInstance, 0);
	if (glhMouseHook != NULL) 
	{
		glMainWin = hwnd;
		bResult = TRUE;
	}
	return bResult;
}

BOOL CMouseHook::StopMouseHook()
{
	BOOL bResult = FALSE;
	if (glhMouseHook) bResult = UnhookWindowsHookEx(glhMouseHook);
	if (bResult) 
	{
		glhMouseHook = NULL;
		glMainWin = NULL;
	}
	return bResult;
}

LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
	LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *)lParam;
	
	HWND hWinMineWnd = ::FindWindow(winMineClassName,NULL);
	if (nCode < HC_ACTION || hWinMineWnd != pMouseHook->hwnd)
		return CallNextHookEx(glhMouseHook,nCode,wParam,lParam); 
	if ( GetForegroundWindow() != hWinMineWnd ) 
		return CallNextHookEx(glhMouseHook,nCode,wParam,lParam); 
	
	if ( wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN ||
		wParam == WM_LBUTTONUP || wParam == WM_RBUTTONUP ) 
	{
		MsgMouse Msg;
		Msg.pt = pMouseHook->pt;
		Msg.KeyValue = wParam;
		COPYDATASTRUCT cs;
		cs.dwData = 0;			
		cs.cbData = sizeof(MsgMouse);	
		cs.lpData = &Msg;		
		SendMessage(glMainWin, WM_COPYDATA, (WPARAM)pMouseHook->hwnd, (LPARAM)&cs);
	}
	
	return CallNextHookEx(glhMouseHook,nCode,wParam,lParam);		
}

BOOL CMouseHook::StartKeyBoardHook()
{
	BOOL bResult = FALSE;
	glhKeyBoardHook = SetWindowsHookEx(WH_MOUSE, KeyBoardProc, glhInstance, 0);
	if (glhKeyBoardHook != NULL) bResult = TRUE;
	return bResult;
}

BOOL CMouseHook::StopKeyBoardHook()
{
	BOOL bResult = FALSE;
	if (glhKeyBoardHook) bResult = UnhookWindowsHookEx(glhKeyBoardHook);
	if (bResult) glhKeyBoardHook = NULL;
	return bResult;
}

LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
	
	return CallNextHookEx(glhKeyBoardHook,nCode,wParam,lParam);		
}

⌨️ 快捷键说明

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