На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Как выделить файлы в Проводнике , Просто открыть окно, и выделить в нём файлы|папки
    Сабж?
    Просто открыть окно - не вопрос. И открыть файл тоже. А вот на пол-пути чтоб остановиться?
    Нужно открыть окно "Мой компьютер" или "Проводник", в котором будет выбран нужный файл (или группа).
      http://www.sources.ru/cpp/mfc/t5774.htm не поможет? :blink:
        Цитата Тестировщица @
        http://www.sources.ru/cpp/mfc/t5774.htm не поможет?

        Похоже на то, что может. Только это не шибко похоже на простой путь.. :o
        Мало того, что мне нужно открыть окно, потом найти в нём ещё сам CListCtrl, потом нужно ещё найти соответствующий моему файлу Item (итерачиться через все with GetNextItem :unsure: )...

        Ну, ежели ничего другого не нарисуется, то можно и это будет попробовать.
        Пасиб, Тестировщица.
          ExpandedWrap disabled
            ShellExecute(Handle, 'open', 'explorer.exe', '/select, hh.exe', 'c:\windows', SW_SHOWNORMAL);
            Цитата Rouse_ @
            ExpandedWrap disabled
              ShellExecute(Handle, 'open', 'explorer.exe', '/select, hh.exe', 'c:\windows', SW_SHOWNORMAL);


            Пасиб. Именно это и использовал. Только есть одна досадная вещь в таком вызове: когда папка уже открыта в окне, то позиционирования не происходит. Просто идёт реюз окна с сохранением текущего выделения в нём.
            В принципе, с этим можно жить.. :) Вопрос решен.
            Сообщение отредактировано: Mechanic -
              а ты перед этим закрывай окно
                Цитата Алексей @
                а ты перед этим закрывай окно

                Красиво сказано.. ;) Только как это окно найти потом?

                user posted image
                  да не, найти по заголовк, закрыть, а потом новое с помощью ShellExecute(...
                    Цитата Mechanic @
                    Именно это и использовал. Только есть одна досадная вещь в таком вызове: когда папка уже открыта в окне, то позиционирования не происходит.

                    Да в принципе путь то нам известен? Известен, посему делаем финт хвостом:

                    ExpandedWrap disabled
                      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;


                    Это проще чем искать по заголовку.
                      Цитата Rouse_ @
                      ExpandedWrap disabled
                        function OpenExplorerAndSelectFile(Path: String): Boolean;


                      Rouse_, Спасибо огромное! Такой финт хвостом отлично срабатывает. :yes:
                      А ить и не подозревал об IWebBrowserApp.. Исчо раз Пасиб!
                        Кстати, с этим флагом можно добавить в меню Tools дельфи очень удобный пункт, который открывает папку текущего юнита и подсвечивает его. См. аттач.
                        Прикреплённый файлПрикреплённый файлOpen.JPG (31.05 Кбайт, скачиваний: 851)
                          А как выделить несколько файлов?
                            копай в сторону SHOpenFolderAndSelectItems
                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,1201 ]   [ 15 queries used ]   [ Generated: 15.07.25, 18:01 GMT ]