要获取当前聚焦IShellWindows的路径,需要先获取当前聚焦的窗口句柄,然后使用FindWindowEx函数查找该窗口句柄下的子窗口,找到具有"WorkerW"类名的子窗口,最后使用SHGetPathFromIDList函数获取该子窗口的路径。

以下是示例代码:

#include <windows.h>
#include <shlobj.h>
#include <atlbase.h>

int main()
{
    // 获取当前聚焦窗口句柄
    HWND hwnd = GetForegroundWindow();

    // 查找WorkerW类名的子窗口
    HWND workerw = NULL;
    HWND child = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL);
    if (child != NULL)
    {
        workerw = FindWindowEx(child, NULL, "WorkerW", NULL);
    }

    // 获取子窗口路径
    TCHAR path[MAX_PATH] = { 0 };
    if (workerw != NULL)
    {
        CComPtr<IShellWindows> psw;
        HRESULT hr = CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&psw));
        if (SUCCEEDED(hr))
        {
            VARIANT v;
            v.vt = VT_I4;
            v.lVal = (LONG_PTR)workerw;
            IDispatch* pdisp = NULL;
            hr = psw->FindWindowSW(&v, &pdisp, SWC_DESKTOP);
            if (SUCCEEDED(hr))
            {
                CComQIPtr<IShellBrowser> psb(pdisp);
                if (psb != NULL)
                {
                    CComPtr<IShellView> psv;
                    hr = psb->QueryActiveShellView(&psv);
                    if (SUCCEEDED(hr))
                    {
                        CComPtr<IFolderView2> pfv2;
                        hr = psv->QueryInterface(IID_PPV_ARGS(&pfv2));
                        if (SUCCEEDED(hr))
                        {
                            ITEMIDLIST* pidl;
                            hr = pfv2->GetSelectedItem(0, &pidl);
                            if (SUCCEEDED(hr))
                            {
                                SHGetPathFromIDList(pidl, path);
                                CoTaskMemFree(pidl);
                            }
                        }
                    }
                }
                pdisp->Release();
            }
        }
    }

    // 输出路径
    wprintf(L"%s\n", path);

    return 0;
}
``
c++ 获取当前聚焦IShellWindows的路径

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

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