GetOpenFileName 在默认目录 'Computer' 打开可能吗?
GetOpenFileName open at default directory 'Computer' possible?
我正在使用 GetOpenFileName
在 C++ 中打开文件,是否可以使用 lpstrInitialDir
在 "Computer" 虚拟位置设置初始目录?
谢谢,
李.
这对于 GetOpenFileName
是不可能的,因为您希望使用的位置不是文件系统的一部分。相反,它是更广泛的 shell 命名空间的一部分。
如果您查看 GetOpenFileName
的文档,您会发现它已被通用项目对话框所取代(实际上是在 10 多年前)。这些对话框确实允许您将初始文件夹指定为 shell 项。
如果您需要支持比 Vista 更旧的 Windows,其中 IFileDialog
不可用,请尝试指定 Shell 文件夹 GUID。例如,My Computer
GUID 是 20D04FE0-3AEA-1069-A2D8-08002B30309D
。您可以这样指定它:
ofn.lpstrInitialDir = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}";
但是,值得注意的是,由于behavioral changes
,这种方法在Windows 7及以后的版本上几乎注定要失败
因此,您最好在 Vista 及更高版本上使用 IFileDialog
。
我正在使用 GetOpenFileName
在 C++ 中打开文件,是否可以使用 lpstrInitialDir
在 "Computer" 虚拟位置设置初始目录?
谢谢, 李.
这对于 GetOpenFileName
是不可能的,因为您希望使用的位置不是文件系统的一部分。相反,它是更广泛的 shell 命名空间的一部分。
如果您查看 GetOpenFileName
的文档,您会发现它已被通用项目对话框所取代(实际上是在 10 多年前)。这些对话框确实允许您将初始文件夹指定为 shell 项。
如果您需要支持比 Vista 更旧的 Windows,其中 IFileDialog
不可用,请尝试指定 Shell 文件夹 GUID。例如,My Computer
GUID 是 20D04FE0-3AEA-1069-A2D8-08002B30309D
。您可以这样指定它:
ofn.lpstrInitialDir = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}";
但是,值得注意的是,由于behavioral changes
,这种方法在Windows 7及以后的版本上几乎注定要失败因此,您最好在 Vista 及更高版本上使用 IFileDialog
。