修改打开的文件夹路径

时间:2014-03-12 10:23:21

标签: c# path directory explorer

假设用户有一个打开的资源管理器窗口,其上打开了文件夹W:\abc

我有两个问题:

  1. 我是否可以知道文件夹W:\abc当前是否已打开?
  2. 我可以更改当前打开的文件夹的路径吗?例如,将其设为W:\

4 个答案:

答案 0 :(得分:0)

我不认为这是可能的。我不知道以这种方式与正在运行的资源管理器进程交互的方式。

答案 1 :(得分:0)

要回答您的第一个问题,这取决于您的操作系统版本,但我已使用Shell Document Viewer获取过去系统中所有当前打开的shell窗口的列表。然后,您可以相应地过滤shellWindows列表。

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();

string fileName;

foreach ( SHDocVw.InternetExplorer ie in shellWindows )
{
    fileName = Path.GetFileNameWithoutExtension( ie.FullName ).ToLower();

    if ( fileName( "explorer" ) )
        Console.WriteLine( "Explorer looking at : {0}", ie.LocationURL );
}

另一种方法是获取所有正在运行的进程的列表,筛选explorer.exe,然后使用Process.MainWindowTitle获取当前打开的路径,如下所示:

var processList = Process.GetProcesses();

foreach (Process process in processList)
{
    // do something here with process.MainWindowTitle
}

答案 2 :(得分:0)

您可以执行此操作,但需要对本机代码使用大量调用。 Raymond Chen有一个如何使用C:

中的直接WinAPI调用来执行此操作的示例

Querying information from an Explorer window

我没有完全评估代码,但我相信它可以转换为C#。尽管如此,你还是需要大量的P / Invoke和C知识。

答案 3 :(得分:0)

1)您可以枚举所有打开的Explorer实例,并将您的文件夹与每个Explorer实例的当前文件夹进行比较。 Sample of enumeration

2)您可以调用IShellBrowser对象的BrowseObject方法来导航到新文件夹。样品:

procedure BrowseToFolder(AShellBrowser: IShellBrowser; const AFolder: UnicodeString);
var
  DesktopFolder: IShellFolder;
  Eaten: DWORD;
  IDList: PItemIDList;
  Attr: DWORD;
begin
  SHGetDesktopFolder(DesktopFolder);
  try
    Attr := 0;
    OleCheck(DesktopFolder.ParseDisplayName(0, nil, PWideChar(AFolder), Eaten, IDList, Attr));
    try
      AShellBrowser.BrowseObject(IDList, SBSP_ABSOLUTE);
    finally
      CoTaskMemFree(IDList);
    end;
  finally
    DesktopFolder := nil;
  end;
end;