怎么获取Windows资源管理器窗口的路径

把嘎嘎 2024-07-03 09:11:05

 这是一个资源管理器窗口,通过以下代码获取窗口:

HWND hwnd = GetForegroundWindow();
char className[256];  
GetClassNameA(hwnd, className, sizeof(className));  
if (strcmp(className, "CabinetWClass") == 0) {  
    // 可能是资源管理器窗口  
}

那么如何获取路径,如图中的 R:\

...全文
465 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnwenjw 2024-07-06
  • 打赏
  • 举报
回复

学习一下

dbvuw 2024-07-03
  • 打赏
  • 举报
回复

学到了

凯特梦阮_KTMR 2024-07-03
  • 打赏
  • 举报
回复 1

要获取资源管理器窗口中显示的路径(例如 "R:"),你可以使用以下方法:

获取路径文字控件的句柄: Windows资源管理器窗口中显示路径的通常是一个编辑框或者静态文字控件。你可以使用窗口遍历或者其他API来找到这个控件。

使用窗口遍历找到路径控件:

首先,获取资源管理器窗口的句柄,你已经使用了 GetForegroundWindow() 和 GetClassNameA() 来检查窗口类名。
接下来,可以使用 FindWindowEx() 或者 EnumChildWindows() 函数来找到资源管理器窗口中显示路径的控件句柄。
获取控件文本: 一旦找到了路径控件的句柄,可以使用 GetWindowText() 函数来获取控件显示的文本内容。

以下是一个简单的示例代码,展示如何获取资源管理器窗口中显示路径的文本:

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = GetForegroundWindow();
    char className[256];
    GetClassNameA(hwnd, className, sizeof(className));

    if (strcmp(className, "CabinetWClass") == 0) {
        // 找到资源管理器窗口,接下来查找路径控件
        HWND hPathControl = NULL;
        hPathControl = FindWindowEx(hwnd, NULL, "Breadcrumb Parent", NULL);

        if (hPathControl != NULL) {
            // 找到路径控件,获取其文本
            char pathText[256];
            GetWindowTextA(hPathControl, pathText, sizeof(pathText));

            // 输出路径文本
            std::cout << "Path: " << pathText << std::endl;
        } else {
            std::cout << "Path control not found." << std::endl;
        }
    }

    return 0;
}

请注意:

示例中使用了 FindWindowEx() 来查找路径控件。你需要确保指定的控件类名或者窗口标题正确。
控件的类名和窗口标题可能根据不同版本的Windows和配置而有所不同,需要根据实际情况调整。
这只是一个简单的示例,实际中可能需要更复杂的窗口遍历或者控件识别逻辑,具体取决于你要操作的资源管理器窗口的具体情况和需求。

m0_74878052 2024-07-03
  • 举报
回复
@凯特梦阮_KTMR 我是win11的,我的className是"ForegroundStaging",但路径控件类好像不叫"Breadcrumb Parent"
把嘎嘎 2024-07-31
  • 举报
回复
@m0_74878052 你好,请问有在win11上解决这个问题吗?win11与win10这里不一样了
凯特梦阮_KTMR 2024-08-30
  • 举报
回复
@m0_74878052 在Windows 11中,资源管理器的路径控件和窗口类名可能与Windows 10有所不同,因此你需要更新控件查找的方法。以下是一个针对Windows 11的示例,展示如何获取资源管理器窗口中显示路径的文本: #include &lt;windows.h&gt; #include &lt;iostream&gt; int main() { HWND hwnd = GetForegroundWindow(); char className[256]; GetClassNameA(hwnd, className, sizeof(className)); if (strcmp(className, "CabinetWClass") == 0 || strcmp(className, "FolderView") == 0) { // 找到资源管理器窗口,接下来查找路径控件 HWND hPathControl = NULL; // 尝试查找路径控件,可能需要调整类名 hPathControl = FindWindowEx(hwnd, NULL, "DirectUIHWND", NULL); if (hPathControl == NULL) { hPathControl = FindWindowEx(hwnd, NULL, "Breadcrumb Parent", NULL); // Older versions } if (hPathControl != NULL) { // 找到路径控件,获取其文本 char pathText[256]; GetWindowTextA(hPathControl, pathText, sizeof(pathText)); // 输出路径文本 std::cout &lt;&lt; "Path: " &lt;&lt; pathText &lt;&lt; std::endl; } else { std::cout &lt;&lt; "Path control not found." &lt;&lt; std::endl; } } else { std::cout &lt;&lt; "Not a File Explorer window." &lt;&lt; std::endl; } return 0; } 注意事项: 窗口类名:你提到的 "ForegroundStaging" 可能是新的类名,可以使用工具如 Spy++ 来确认准确的类名和控件类名。 控件类名:控件的类名可能因系统版本和资源管理器配置不同而有所变化,可能需要使用工具确认实际的控件类名。 权限问题:运行代码时,确保有足够的权限来访问窗口句柄和控件文本。 根据实际情况调整类名和控件名以适应 Windows 11 的环境。
1条回复

15,475

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧