gpt4 book ai didi

c++ - 如何在 C++ 中获取 Windows 资源管理器的完整路径

转载 作者:行者123 更新时间:2023-11-30 01:24:37 25 4
gpt4 key购买 nike

我可以安全地假设 Windows 资源管理器总是从 Windows 系统目录启动吗?另外,它的进程总是命名为“explorer.exe”吗?

如果不是,如何获取其完整文件路径?

编辑: 忘了提 -- 我需要这个来稍后找出在给定用户 session 中运行的 Windows 资源管理器的进程 ID。因此我搜索了它的完整路径。

编辑 2: 感谢所有做出贡献的人,尤其是 sehe!在他的帖子之后我找到了this page这解释了如何设置自己的 shell。我通过用我自己的进程完全替换 explorer.exe 进行了疯狂测试,结果如下: enter image description here这是 full-size link如果你调整它的大小。

如您所见,技术上我可以用我想出的任何进程替换 explorer.exe。您还可以在我的屏幕截图中看到,Windows 让我可以完全控制 Shell(屏幕截图是我的整个窗口。)

所以最重要的是,获取“explorer.exe”文件路径(或使用任何 Shell 进程)的唯一方法是使用我上面引用的链接中的那些注册表项——与 sehe 建议的非常接近,只需要再做几项检查,但这是一件非常简单的事情。

至于 Sean Cline 的建议,只有当我们运行带有带有特定类名的托盘窗口的“标准”Windows 资源管理器时,这才是一个非常优雅的解决方案。

最佳答案

可以安全地假设 explorer.exe 始终位于 %windir% 或 %SystemRoot% 中,因为它多年未移动。但是,如果您试图通过资源管理器调用某些东西,您可能想要使用 ShellExecute () 函数。

如果您确实需要路径,最简单的获取方式可能是调用 SHGetKnownFolderPath () 使用 FOLDERID_Windows 作为第一个参数。

编辑:这是我在知道您正在寻找 shell 进程的 PID 时对一些代码的尝试:

DWORD trayPID;
HWND trayWnd = FindWindow("Shell_TrayWnd", NULL);
GetWindowThreadProcessId(trayWnd, &trayPID);

它查找任务栏的 hWnd 并找到拥有的 PID。您可能需要为资源管理器未运行且该窗口不存在的情况添加一些错误处理 - 不太可能,但有可能。

关于c++ - 如何在 C++ 中获取 Windows 资源管理器的完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com