?? mousedll.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 + -