C++ Win API 监听鼠标点击获取文件管理器当前路径
C++ Win API 监听鼠标点击获取文件管理器当前路径
本文提供一个使用 C++ Win API 监听鼠标点击事件,并在点击文件管理器窗口时输出当前路径的示例程序。
#include <windows.h>
#include <iostream>
// 定义一个回调函数,用于处理鼠标事件
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0 && wParam == WM_LBUTTONDOWN) {
HWND hWnd = WindowFromPoint(((MSLLHOOKSTRUCT*)lParam)->pt);
TCHAR className[MAX_PATH];
GetClassName(hWnd, className, MAX_PATH);
// 如果是文件管理器窗口,输出当前路径
if (_tcscmp(className, _T("CabinetWClass")) == 0) {
TCHAR path[MAX_PATH];
SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(0x0111, 0), (LPARAM)path);
std::wcout << path << std::endl;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
// 安装鼠标钩子
HHOOK hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0);
if (hHook == NULL) {
std::cerr << "Failed to install hook!" << std::endl;
return 1;
}
// 消息循环,等待鼠标事件
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 卸载钩子
UnhookWindowsHookEx(hHook);
return 0;
}
该程序使用了鼠标钩子来监听鼠标事件,当鼠标左键被按下时,会获取当前鼠标所在的窗口句柄,并判断该窗口是否为文件管理器窗口。如果是,则发送 WM_COMMAND 消息,通过参数 0x0111 和 path 获取当前路径,并输出到控制台。注意到这里使用的是宽字符集(wchar_t),因为路径可能包含中文字符。
原文地址: https://www.cveoy.top/t/topic/oD3p 著作权归作者所有。请勿转载和采集!