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 消息,通过参数 0x0111path 获取当前路径,并输出到控制台。注意到这里使用的是宽字符集(wchar_t),因为路径可能包含中文字符。

C++ Win API 监听鼠标点击获取文件管理器当前路径

原文地址: https://www.cveoy.top/t/topic/oD3p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录