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