我有一个过程在
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。