Windows 资源管理器开关
----------------------
Windows 资源管理器开关对创建根文件夹很有用:
Explorer [/e,][/root,<对象>,] [[<文件夹>]| [/select, <子对象>]]
/e 使用资源管理器视图(作用域和结果窗格视图)。默认
情况为"打开"视图(仅结果窗格视图)。
/root<对象> 指定在"一般"名称空间内用作资源管理器根目录的对
象。默认情况下为 Desktop 文件夹。
/select 打开父文件夹,选择指定的对象。
<子对象> "Windows 资源管理器"打开的文件夹或文件。如果使用
/select 选项,将突出显示子对象。
如果没有使用 /select 选项,则在"资源管理器"中打开
文件夹或文件。默认情况下为 root<对象>。
例如:
Explorer /e, /root, \\Reports
在 \\Reports 下打开资源管理器窗口。
Explorer /select, C:\Windows\Calc.exe
在 C:\Windows 目录下打开文件夹(或激活已打开的文件夹),并选择 Calc.exe。
Explorer /e, /root, \Source\Internal\Design\Users\David\Archive
从 Archive 文件夹中打开一文件夹,这是创建一个复杂的、远程存档文件夹的好办法。然后将指向此文件夹的链接( \\Source\Internal\Design\Users\David\Archive )
放入"SendTo"文件夹中,以便快速定位文档。
function GetItemIdListFromPath (path:widestring; var lpItemIdList:PItemIdList):boolean;
var
pShellFolder:IShellFolder;
hr:HRESULT;
chused:cardinal;
attr:cardinal;
begin
result:=False;
pShellFolder:=nil;
// 获得接口
if SHGetDesktopFolder(pShellFolder)<>NOERROR then exit;
// 将路径转换为 ITEMIDLIST
hr:=pShellFolder.ParseDisplayName(0,nil{0},pwidechar(path),chused,lpitemidlist,attr);
if FAILED(hr) then begin
lpItemIdList:=nil;
exit;
end;
result:=true;
end;
//函数 使用资源管理器打开一个文件夹并选中指定文件,如果文件夹已经被打开就直接选中
procedure OpenfolderAndSelect(fname:string);
procedure old_locate(fname:string);
begin
ShellExecute(0,'explore',PChar('/n,/select,' + fname),'','',SW_SHOWNORMAL);
end;
type SHOpenFolderAndSelectItems=function(pidlFolder:PItemIdList; cidl:cardinal; apidl:PItemIdList; dwflags:dword): HRESULT; stdcall;
var
ShOp:SHOpenFolderAndSelectItems;
idlist:PItemIdList;
hr:hresult;
dllHandle:Thandle;
begin
dllHandle:=SafeLoadLibrary('shell32.dll');
if dllHandle=0 then begin
old_locate(fname);
exit;
end;
ShOp:=GetProcAddress(dllHandle,'SHOpenFolderAndSelectItems');
if @ShOp=nil then begin
FreeLibrary(dllHandle);
old_locate(fname);
exit;
end;
CoInitialize(nil);
GetItemIdListFromPath(fname,idlist);
try
hr:=shop(idlist,0,nil,0);
except
old_locate(fname);
FreeLibrary(dllHandle);
CoUnInitialize;
exit;
end;
if FAILED(hr) then old_locate(fname);
FreeLibrary(dllHandle);
CoUnInitialize;
end;