Открывает указанную папку и выделяет в ней указанные файлы. Может выделить сразу в режиме редактирования имени.
Может выделять файлы на рабочем столе.

Код:
Add(InlineCode,1971931,490,616)
{
 @Hint=#90:Выделение файлов/папок в проводнике Windows и на рабочем столе. Есть режим редактирования.|38:Автор: 3042. Версия 1.0 от 19.09.2020.|
 WorkPoints=#190:doOpenFolderAndSelectItems=Открывает папку dtFolder и выделяет в ней файлы из списка dtFileNamesList. При dtEditMode=1 файл выделяется в режиме редактирования (только если указан один файл).|269:doSelectDesktopItems=Выделяет файлы из списка dtFileNamesList на рабочем столе. DtFolder игнорируется. При dtEditMode=1 файл выделяется в режиме редактирования (только если указан один файл). Чтобы выделить "Мой компьютер", вставьте в dtFileNamesList две пустых строки.|
 DataPoints=#41:dtFolder=Путь к папке (напр.: C:\Windows)|59:dtFileNamesList=Список имён (без пути) файлов для выделения|101:dtEditMode=Если 1, то файл выделится в режиме редактирования (работает, только если указан один файл)|
 Code=#92://Выделение файлов/папок в проводнике Windows и на рабочем столе. Есть режим редактирования.|40://Автор: 3042. Версия 1.0 от 19.09.2020.|15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,windows;|0:|5:const|17:  OFASI_EDIT = 1;|24:  OFASI_OPENDESKTOP = 2;|0:|4:type|19: TSHItemID = record|12:   cb: Word;|29:   abID: array[0..0] of Byte;|5: end;|21: TItemIDList = record|20:    mkid: TSHItemID;|5: end;|28: PItemIDList = ^TItemIDList;|31: //PPItemIDList = ^PItemIDList;|52: TPItemIDListArray = array[0..65535] of PItemIDList;|40: PPItemIDListArray = ^TPItemIDListArray;|57: {IShellFolder = interface(IUnknown)// [SID_IShellFolder]|45:   function ParseDisplayName(hwndOwner: HWND;|75:     pbcReserved: Pointer; lpszDisplayName: PWideChar; out pchEaten: ULONG;|72:     out ppidl: PItemIDList; var dwAttributes: ULONG): HResult; stdcall;|6: end;}|28: THiAsmClass = class(TDebug)|10:   private|66:    procedure OpenFolderAndSelectItems(Desktop:boolean; dt:TData);|9:   public|23:    dtFolder:THI_Event;|30:    dtFileNamesList:THI_Event;|25:    dtEditMode:THI_Event;|67:    procedure doOpenFolderAndSelectItems(var dt:TData; index:word);|61:    procedure doSelectDesktopItems(var dt:TData; index:word);|5: end;|0:|73:function SHOpenFolderAndSelectItems( pidlFolder: PItemIDList; cidl: UINT;|88:    apidl: PPItemIDListArray; dwFlags: DWORD ):HRESULT; stdcall; external 'shell32.dll';|96://function SHGetDesktopFolder(var ppshf: IShellFolder):HResult; stdcall; external 'shell32.dll';|91:function ILCreateFromPath(pszPath: PWideChar):PItemIDList; stdcall; external 'shell32.dll';|68:procedure ILFree(pidl:PItemIDList); stdcall; external 'shell32.dll';|0:|14:implementation|0:|71://----------------------------Внешние точки----------------------------|49:procedure THiAsmClass.doOpenFolderAndSelectItems;|5:begin|37: OpenFolderAndSelectItems(false, dt);|4:end;|0:|43:procedure THiAsmClass.doSelectDesktopItems;|5:begin|36: OpenFolderAndSelectItems(true, dt);|4:end;|0:|0:|75://----------------------------Внутренние методы----------------------------|74:procedure THiAsmClass.OpenFolderAndSelectItems(Desktop:boolean; dt:TData);|14:var i:Integer;|18:    strFld:string;|20:    boolEdm:boolean;|19:    FList:PStrList;|26:    IDLFolder:PItemIDList;|34:    IDLFileList:PPItemIDListArray;|5:begin|40: if Desktop then strFld := '' else begin|36:  strFld := ReadString(dt,dtFolder);|43:  if not DirectoryExists(strFld) then exit;|63:  if strFld[length(strFld)] <> '\' then strFld := strFld + '\';|5: end;|21: FList := NewStrList;|54: FList.SetText(ReadString(dt,dtFileNamesList), false);|50: if FList.Count=0 then begin FList.Free; exit end;|43: boolEdm := ReadInteger(dt,dtEditMode) = 1;|0:|70: if FList.Count=1 then begin //если объект один - всё немного проще :)|29:  //SHGetDesktopFolder(desk);|91:  //desk.ParseDisplayName(ReadHandle, nil, StringToOleStr(ToString(dt)), che, iidl, attrs);|101:  //Вот нафига всякие там SHGetDesktopFolder, ParseDisplayName, когда есть простой ILCreateFromPath?!|75:  IDLFolder := ILCreateFromPath( StringToOleStr(strFld + FList.Items[0]) );|81:  SHOpenFolderAndSelectItems(IDLFolder, 0, nil, byte(boolEdm) + byte(Desktop)*2);|89: end else begin //а вот если объектов много... (да ещё и режим редактирования недоступен)|96:  if Desktop then IDLFolder := nil else IDLFolder := ILCreateFromPath( StringToOleStr(strFld) );|57:  GetMem(IDLFileList, SizeOf(PItemIDList) * FList.Count);|109:  for i:=0 to FList.Count-1 do IDLFileList[i] := ILCreateFromPath( StringToOleStr(strFld + FList.Items[i]) );|83:  SHOpenFolderAndSelectItems(IDLFolder, FList.Count, IDLFileList, byte(Desktop)*2);|58:  for i:=FList.Count-1 downto 0 do ILFree(IDLFileList[i]);|23:  FreeMem(IDLFileList);|5: end;|19: ILFree(IDLFolder);|12: FList.Free;|4:end;|0:|4:end.|
 link(dtFolder,7616672:Text,[])
 link(dtFileNamesList,12392943:Var,[])
 link(dtEditMode,4174541:Text,[])
}
Add(Button,14117838,294,609)
{
 Left=10
 Top=45
 Width=220
 Caption="В старом процессе - мультивыделение"
 link(onClick,5063566:doEvent1,[])
}
Add(Button,1557049,294,658)
{
 Left=10
 Top=70
 Width=270
 Caption="В старом процессе - выделение на рабочем столе"
 link(onClick,14176758:doEvent1,[])
}
Add(StrList,3527368,546,455)
{
 Strings=#11:regedit.exe|11:notepad.exe|3:Web|9:Write.exe|
}
Add(VisualStrings,4174541,504,581)
{
 Lines=#1:1|
}
Add(StrList,11515467,497,455)
{
 Strings=#18:Microsoft Edge.lnk|0:|0:|
}
Add(VisualStrings,7616672,490,420)
{
 Lines=#10:C:\Windows|
 Width=67
}
Add(Button,1211895,294,707)
{
 Left=10
 Top=95
 Width=275
 Caption="В старом процессе - выделение с редактированием"
 link(onClick,11107918:doEvent1,[])
}
Add(GetIndexData,12392943,497,525)
{
 Count=3
 link(Data1,11515467:Text,[])
 link(Data2,3527368:Text,[(510,513)(552,513)])
 link(Data3,9759598:Text,[(517,513)(608,513)])
}
Add(ChanelToIndex,2834110,448,525)
{
 Count=3
 link(onIndex,12392943:doIndex,[])
}
Add(Hub,5063566,343,609)
{
 link(onEvent1,2834110:doWork2,[(402,615)(402,538)])
 link(onEvent2,6882957:doWork2,[])
}
Add(StrList,9759598,602,455)
{
 Strings=#11:regedit.exe|
}
Add(Hub,14176758,343,658)
{
 link(onEvent1,2834110:doWork1,[(392,664)(392,531)])
 link(onEvent2,1971931:doSelectDesktopItems,[(423,671)])
}
Add(Hub,11107918,343,707)
{
 link(onEvent1,2834110:doWork3,[(410,713)(410,545)])
 link(onEvent2,6882957:doWork3,[(417,720)])
}
Add(HubEx,6882957,413,616)
{
 link(onEvent,1971931:doOpenFolderAndSelectItems,[])
}