How do I display Explorer with a file selected?

2019-03-19 06:26发布

问题:

What's the API call to display an Explorer window with a specified file selected? Exactly as happens when you click the "Find Target..." button in the Properties dialog of a .lnk shortcut? I know there is function (or an interface method) for that, but I forgot the name, and cannot find it again.

Note that I'm aware of explorer /select,<pathname> command line and not interested in using it instead of API call.

回答1:

You need SHOpenFolderAndSelectItems. This question was early discussed here - Programmatically selecting file in explorer
Dont forget to call CoInitialize before first use of SHOpenFolderAndSelectItems



回答2:

This function opens explorer, and selects the specified file:

uses ShellAPI, ...;

procedure TForm1.ShowFile(const aFileName:String);
begin
  ShellExecute(Handle, 'OPEN', PChar('explorer.exe'), PChar('/select, "' + aFileName + '"'), nil, SW_NORMAL)
end;

procedure TForm1.ShowFolder(const aPath:String);
begin
  ShellExecute(Handle, 'OPEN', PChar('explorer.exe'), PChar('/root, "' + aPath + '"'), nil, SW_NORMAL) 
end;

Or is this the "commandline" that you didn't want to use?



回答3:

You're looking for IExplorerBrowser::BrowseToObject, I think. Based on the very vague, non-specific question and comments with no additional information when asked for it, it's the best guess I can provide. IExplorerBrowser has a lot of additional functionality you may want to explore as well, in case this specific method isn't exactly what you're looking to find.



回答4:

Since you wanted a name only: IShellLink?