首页  编辑  

Windows 资源管理器开关

Tags: /超级猛料/Stream.File.流、文件和目录/Shell操作/   Date Created:

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;