Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как выделить нужный файл в открываемой папке? [D7, WinXP]


dmitry_12_08_73 ©   (2009-06-23 12:12:00) 

Открываю папку функцией ShellExecute(Application.Handle, 'open', PChar('с:\'), nil, nil, SW_SHOWNORMAL). Как подсветить нужный фай в открываемой папке?


Омлет   (2009-09-30 23:00:00) [1]

> А как выделить в папке несколько файлов?

Мне тоже интересно.
Гугл большую часть результатов выдает на китайском :(


Stranger   (2009-09-30 13:38:00) [2]

А как выделить в папке несколько файлов?


Andy BitOff   (2009-06-25 15:29:00) [3]

Розыч как всегда поражает своими глубокими познаниями.
Спасибо. В мемориз.


Rouse_   (2009-06-24 11:35:00) [4]

uses ..., SHDocVw;

function OpenExplorerAndSelectFile(Path: String): Boolean;

 function ParceURLName(const Value: String): String;
 const
   scFilePath: array [0..7] of Char = ('f', 'i', 'l', 'e', ':', '/', '/', '/');
 begin
   if CompareMem(@scFilePath[0], @Value[1], 8) then
   begin
     Result := Copy(Value, 9, Length(Value));
     Result := StringReplace(Result, '/', '\', [rfReplaceAll]);
     Result := StringReplace(Result, '%20', ' ', [rfReplaceAll]);
     Result := IncludeTrailingBackslash(Result);
   end
   else
     Result := Value;
 end;

var
 iShellWindow: IShellWindows;
 iWB: IWebBrowserApp;
 spDisp: IDispatch;
 I: Integer;
 S, FilePath, FileName: String;
begin
 Result := FileExists(Path);
 if not Result then Exit;
 FilePath := AnsiUpperCase(ExtractFilePath(Path));
 FileName := ExtractFileName(Path);
 iShellWindow := CoShellWindows.Create;
 for I := 0 to iShellWindow.Count - 1 do
 begin
   spDisp := iShellWindow.Item(I);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(IWebBrowserApp, iWB);
   if iWB <> nil then
   begin
     S := ParceURLName(iWB.LocationURL);
     if AnsiUpperCase(S) = FilePath then
     begin
       SendMessage(iWB.HWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
       Break;
     end;
   end;
 end;
 ShellExecute(0, 'open', 'explorer.exe',
   PChar('/select, ' + FileName), PChar(FilePath), SW_SHOWNORMAL);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if not OpenExplorerAndSelectFile('c:\windows\notepad.exe') then
   ShowMessage('Файл не найден.');
end;


dmitry_12_08_73   (2009-06-24 11:18:00) [5]

Спасибо большое за "explorer /n,/select,файл". Но при выполнении этой команды оесли папка уже открыта, открывается её копия, а мне надо, чтобы в уже открытой папке подсвечивался нужный файл


RWolf   (2009-06-24 09:50:00) [6]


> Можно как-то решить эту проблему?

Можно, добавить ключ /n

explorer /n,/select,файл


brother   (2009-06-24 04:41:00) [7]

перед запуском проверь: открыта ли папка, если да - закрой ее)


dmitry_12_08_73   (2009-06-23 16:42:00) [8]

спасибо, запускаю
winexec(PChar('explorer /select,' + 'Нужная папка'+'нужный файл'), SW_RESTORE)
нормально работает, если 'Нужная папка' не открыта. Если же она была открыта до запуска winexec, то 'нужный файл' не подсвечивается. Можно как-то решить эту проблему?


RWolf   (2009-06-23 14:36:00) [9]

запустить EXPLORER.EXE с ключом /select,нужный_файл


Наверх

Титульная страница Поиск, карта сайта Написать письмо