gpt4 book ai didi

c# - 使用选定文件打开 Windows 资源管理器(或焦点,如果存在)的代码

转载 作者:可可西里 更新时间:2023-11-01 07:46:42 28 4
gpt4 key购买 nike

我的目标是编写一个 C# 代码来打开一个 Windows 资源管理器窗口,并选择一个特定的文件。如果这样的窗口已经打开,我想把它放在前面。我尝试了两种选择。

首先,我首先显式调用 explorer.exe:

arg = "/select, " + pathToFile;
Process.Start("explorer.exe", arg);

这会打开并选择一个窗口,但问题是它总是会打开一个新窗口,即使存在一个窗口。所以我尝试了这个:

Process.Start(pathToDir);

这要么打开一个新窗口,要么聚焦一个旧窗口,但我没有选择文件的选项。

我能做什么?我看了explorer's arguments而且我看不到任何可以使用的东西。我能想出的最后一个选择是获取已打开窗口的列表并使用一些 WINAPI 级代码来处理它,但这似乎有点矫枉过正。

最佳答案

我不知道是否可以使用 process start,但下面的代码仅在需要时在包含的文件夹上打开 Windows 资源管理器(如果该文件夹已经打开,或者在另一个文件上被选中,它被重新使用)并选择想要的文件。

它在 SHOpenFolderAndSelectItems function 上使用 p/invoke 互操作代码:

public static void OpenFolderAndSelectFile(string filePath)
{
if (filePath == null)
throw new ArgumentNullException("filePath");

IntPtr pidl = ILCreateFromPathW(filePath);
SHOpenFolderAndSelectItems(pidl, 0, IntPtr.Zero, 0);
ILFree(pidl);
}

[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
private static extern IntPtr ILCreateFromPathW(string pszPath);

[DllImport("shell32.dll")]
private static extern int SHOpenFolderAndSelectItems(IntPtr pidlFolder, int cild, IntPtr apidl, int dwFlags);

[DllImport("shell32.dll")]
private static extern void ILFree(IntPtr pidl);

关于c# - 使用选定文件打开 Windows 资源管理器(或焦点,如果存在)的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14600987/

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