
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.138] |
![]() |
|
![]() |
|
|
Сабж?
Просто открыть окно - не вопрос. И открыть файл тоже. А вот на пол-пути чтоб остановиться? Нужно открыть окно "Мой компьютер" или "Проводник", в котором будет выбран нужный файл (или группа). |
Сообщ.
#2
,
|
|
|
http://www.sources.ru/cpp/mfc/t5774.htm не поможет?
![]() |
Сообщ.
#3
,
|
|
|
Цитата Тестировщица @ http://www.sources.ru/cpp/mfc/t5774.htm не поможет? Похоже на то, что может. Только это не шибко похоже на простой путь.. ![]() Мало того, что мне нужно открыть окно, потом найти в нём ещё сам CListCtrl, потом нужно ещё найти соответствующий моему файлу Item (итерачиться через все with GetNextItem ![]() Ну, ежели ничего другого не нарисуется, то можно и это будет попробовать. Пасиб, Тестировщица. |
![]() |
Сообщ.
#4
,
|
|
![]() ![]() ShellExecute(Handle, 'open', 'explorer.exe', '/select, hh.exe', 'c:\windows', SW_SHOWNORMAL); |
Сообщ.
#5
,
|
|
|
Цитата Rouse_ @ ![]() ![]() ShellExecute(Handle, 'open', 'explorer.exe', '/select, hh.exe', 'c:\windows', SW_SHOWNORMAL); Пасиб. Именно это и использовал. Только есть одна досадная вещь в таком вызове: когда папка уже открыта в окне, то позиционирования не происходит. Просто идёт реюз окна с сохранением текущего выделения в нём. В принципе, с этим можно жить.. ![]() |
Сообщ.
#6
,
|
|
|
а ты перед этим закрывай окно
|
Сообщ.
#7
,
|
|
|
Цитата Алексей @ а ты перед этим закрывай окно Красиво сказано.. ![]() ![]() |
Сообщ.
#8
,
|
|
|
да не, найти по заголовк, закрыть, а потом новое с помощью ShellExecute(...
|
![]() |
Сообщ.
#9
,
|
|
Цитата Mechanic @ Именно это и использовал. Только есть одна досадная вещь в таком вызове: когда папка уже открыта в окне, то позиционирования не происходит. Да в принципе путь то нам известен? Известен, посему делаем финт хвостом: ![]() ![]() 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 TForm18.Button4Click(Sender: TObject); begin if not OpenExplorerAndSelectFile('c:\windows\notepad.exe') then ShowMessage('Файл не найден.'); end; Это проще чем искать по заголовку. |
Сообщ.
#10
,
|
|
|
Цитата Rouse_ @ ![]() ![]() function OpenExplorerAndSelectFile(Path: String): Boolean; Rouse_, Спасибо огромное! Такой финт хвостом отлично срабатывает. ![]() А ить и не подозревал об IWebBrowserApp.. Исчо раз Пасиб! |
![]() |
Сообщ.
#11
,
|
|
Кстати, с этим флагом можно добавить в меню Tools дельфи очень удобный пункт, который открывает папку текущего юнита и подсвечивает его. См. аттач.
Прикреплённый файл ![]() |
Сообщ.
#12
,
|
|
|
А как выделить несколько файлов?
|
Сообщ.
#13
,
|
|
|
копай в сторону SHOpenFolderAndSelectItems
|