繁体   English   中英

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

[英]How to get the full path to the Windows Explorer in C++

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

如果没有,如何获取其完整文件路径?

编辑:忘记提及-我以后需要这个来找出在给定的用户会话中运行的Windows资源管理器的进程ID。 因此,我寻找其完整路径。

编辑2:感谢所有贡献者,尤其是对sehe! 在他发表文章之后,我发现了该页面该页面解释了如何设置自己的shell。 我通过用自己的进程完全替换了explorer.exe进行了野性测试,结果如下: 在此处输入图片说明 如果您要重新调整尺寸,请点击此处。

如您所见,我可以用任何可能的过程从技术上替换explorer.exe。 您也可以在我的屏幕快照中看到,Windows使我可以完全控制Shell (屏幕快照是我的整个窗口。)

因此,最重要的是,获取“ explorer.exe”文件路径(或使用任何Shell进程)的唯一方法是使用我在上面引用的链接中的那些注册表项-几乎与sehe的建议差不多,仅需一个只需再执行几项检查,但这是一件非常简单的事情。

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

可以肯定的是,explorer.exe多年来一直没有移动,因此始终位于%windir%或%SystemRoot%中。 但是,如果尝试通过资源管理器调用某些内容,则可能要改用ShellExecute ()函数。

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

编辑:这是我刺破一些代码,知道您正在寻找shell进程的PID:

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

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

不,您不能放心地假设这一点,而这与C ++无关。

另外,您没有显示任何代码。 开始:

注册表项是Software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\\Shell (请参见此处 )。

#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <string>

LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)
{
    strValue = strDefaultValue;
    WCHAR szBuffer[512];
    DWORD dwBufferSize = sizeof(szBuffer);
    ULONG nError;
    nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
    if (ERROR_SUCCESS == nError)
    {
        strValue = szBuffer;
    }
    return nError;
}

int main()
{
    HKEY hKey;
    LONG lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon", 0, KEY_READ, &hKey);
    bool bExistsAndSuccess (lRes == ERROR_SUCCESS);
    bool bDoesNotExistsSpecifically (lRes == ERROR_FILE_NOT_FOUND);
    std::wstring shell;
    GetStringRegKey(hKey, L"Shell", shell, L"");
}

双方都同意。 Windows资源管理器始终位于%WINDIR%\\Explorer.exe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM