是的,你可以使用/select
flag當你調用explorer.exe
:
ShellExecute(0, nil, 'explorer.exe', '/select,C:\WINDOWS\explorer.exe', nil,
SW_SHOWNORMAL)
一個稍微更看中的(或許也是更可靠)的方法(uses 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, nil, 0) = S_OK;
finally
ILFree(IIDL);
end;
end;
使用方法回答通過下面的Andreas Rejbrand,我遇到了奇怪的活動,我在Win7 Pro 32bit上,並且有時在使用它時,它會打開目錄但不會突出顯示該文件,或者打開一些非常規目錄,強調完整的東西無關緊要。例如,剛纔我用它來選擇一個文件,但它打開我的個人用戶文件夾並突出顯示「我的文檔」文件夾,當我指向它的文件甚至不在同一個硬盤上時。 – 2013-03-25 07:34:23
我剛注意到這個問題的一個趨勢,它發生在文件名中有某些字符時,例如逗號,這會拋出命令 – 2013-03-25 07:42:26
注意:我的上述問題已通過Andreas更新解決,包括另一個更具體和更可靠解。 – 2013-03-25 16:43:22