我有一个过程在
Windows资源管理器中打开一个文件夹,通过一个目录路径:
procedure TfrmAbout.ShowFolder(strFolder: string); begin ShellExecute(Application.Handle,PChar('explore'),PChar(strFolder),nil,SW_SHOWNORMAL); end;
有没有办法通过这个文件名(完整的文件名路径或只是名称扩展名),并在Windows资源管理器中打开该文件夹,但也被突出显示/选择?我将要有多个文件的位置,然后我需要在Windows中操作该文件.
是的,您可以在调用explorer.exe时使用
/select
flag:
ShellExecute(0,'explorer.exe','/select,C:\WINDOWS\explorer.exe',SW_SHOWNORMAL)
一个更有趣(也许更可靠)的方法(使用ShellAPI,ShlObj):
const OFASI_EDIT = $0001; OFASI_OPENDESKTOP = $0002; {$IFDEF UNICODE} function ILCreateFromPath(pszPath: PChar): PItemIDList stdcall; external shell32 name 'ILCreateFromPathW'; {$ELSE} function ILCreateFromPath(pszPath: PChar): PItemIDList stdcall; external shell32 name 'ILCreateFromPathA'; {$ENDIF} procedure ILFree(pidl: PItemIDList) stdcall; external shell32; function SHOpenFolderAndSelectItems(pidlFolder: PItemIDList; cidl: Cardinal; apidl: pointer; dwFlags: DWORD): HRESULT; stdcall; external shell32; function OpenFolderAndSelectFile(const FileName: string): boolean; var IIDL: PItemIDList; begin result := false; IIDL := ILCreateFromPath(PChar(FileName)); if IIDL <> nil then try result := SHOpenFolderAndSelectItems(IIDL,0) = S_OK; finally ILFree(IIDL); end; end;