![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выделить нужный файл в открываемой папке? [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,нужный_файл