修改已打开的文件夹路径
本文关键字:文件夹 路径 修改 | 更新日期: 2023-09-27 17:49:45
假设用户有一个打开的资源管理器窗口,其中打开了文件夹W:'abc
。
我有两个问题:
- 我能知道文件夹
W:'abc
当前是否打开吗? - 我可以更改当前打开的文件夹的路径吗?例如:
W:'
?
我认为这是不可能的。
您可以这样做,但是您需要使用大量对本机代码的调用。Raymond Chen有一个如何在C中直接调用WinAPI的例子:
从资源管理器窗口查询信息
我还没有完全评估代码,但我很有信心它可以转换为c#。但是,您需要大量的P/Invoke和C知识才能做到这一点。
回答您的第一个问题,这取决于您的操作系统版本,但我过去使用Shell文档查看器来获取系统上当前打开的所有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
}
1)您可以列举所有打开的资源管理器实例,并将您的文件夹与每个资源管理器实例的当前文件夹进行比较。枚举样本。
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;