На главную Наши проекты:
Журнал   ·   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
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Открытие файлов из проводника
    Выделяем НЕСКОЛЬКО файлов в проводнике, зарегистрированых за моей прогой, нажимаем Enter и почему то передается только выделеный файл, как передать все файлы моей программе

    ПС спосибо за уделенное время
      Регистрировать свое расширение оболочки реализующее интерфейс IShellExtInit и в IShellExtInit.Initialize брать все выделенные элементы и передавать своей программе.
        А через парамстр ни как? Я боюсь ета ерунда систему тормозить будет.
          Винда производит последовательные вызовы
          ExpandedWrap disabled
            YourProgram.exe C:\File1.ext
          ExpandedWrap disabled
            YourProgram.exe C:\File2.ext
          ExpandedWrap disabled
            YourProgram.exe C:\File3.ext
          научите программу работать только в одном экземпляре, а вторую копию — передавать параметр запуска первой перед закрытием. Так проще? :)
            PIKACHU для запрета запуска второй копии программы посмотри эту тему ...

            передавать данные между экземплярами можно, например, используя сообщение WM_COPYDATA ...
              PIKACHU пример, который выполняет требуемое тебе в прилагаемом архиве ...

              он открывает в одном приложении несколько файлов (новая копия отсылает параметр и закрывается) ... надеюсь поможет ... ;)
              Прикреплённый файлПрикреплённый файлxxx_explorer.zip (6.9 Кбайт, скачиваний: 194)
                Класно, то что надо), только есть одно но, в папке не роется(
                Сообщение отредактировано: PIKACHU -
                  Цитата PIKACHU @
                  класно, то что надо), только есть одно но, в папке не роется(

                  а зачем рыться? можно вызывать файлы простым анализом выделенной группы файлом из проводника ... а если нужно как ты говоришь "рыться в папке", то перебирай их, например, методами описанными в этой статье ...
                    В том то и дело что при отрытии группы файлов, зарегеные файлы открываются как надо, а папка открывается в эксплоере, мож надо как то регить папку?
                    Сообщение отредактировано: PIKACHU -
                      Цитата PIKACHU @
                      В том то и дело что при отрытии группы файлов, зарегеные файлы открываются как надо, а папка открывается в эксплоере, мож надо как то регить папку?

                      написанно не совсем понятно - попробую потелепатить немного, если проравильно понял, то нужно такое ... при выборе из программы папки на открытие программа перебирает все файлы зарегистрированного типа в ней и открывает их ...

                      для реализации этого можно использовать такой код:

                      ExpandedWrap disabled
                        var
                          fs: TSearchRec;
                        begin
                          result:=0;
                          if findfirst(Dir+'\*.xxx', faAnyFile - faDirectory - faVolumeID, fs) = 0 then
                            repeat
                              inc(result);
                              NewTabData(Dir + '\' + fs.name)
                            until findnext(fs) <> 0;
                          findclose(fs)
                        end;

                      з.ы.: полный код примера в прилагаемом архиве ....
                      Прикреплённый файлПрикреплённый файлxxx_explorer_new.zip (14.37 Кбайт, скачиваний: 124)
                        Не то, поиск я знаю как сделать, например(смотреть в картинку), файлы типа xxx открываются в программе а папка test folder открывается в эксплоеере надо чтоб эксплоер передовал путь папки.
                        Прикреплённый файлПрикреплённый файлtest.JPG (75.36 Кбайт, скачиваний: 435)
                          Цитата PIKACHU @
                          Не то, поиск я знаю как сделать, например(смотреть в картинку), файлы типа xxx открываются в программе а папка test folder открывается в эксплоеере надо чтоб эксплоер передовал путь папки.

                          такой реакции для папок можно добиться если зарегистрировать для меню "Открыть с помощью ..." твое приложение (раздел, если не ошибаюсь [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.directory\OpenWithList]) ...

                          но если просто бросать файлы на форму приложения и обрабатывать их то посмотри материалы этой темы ... еще один вариант решения задачи это регистрация для папок пункта меню "Открыть в MyProject" для контекстного меню ...

                          Цитата
                          создать команду, применимую к любой папке, диску и т.п.
                          В разделе HKEY_CLASSES_ROOT\Folder\shell создайте новый раздел, назвав его своим именем (например "Огого"). В параметре "По умолчанию" задайте имя команды (например "Команда Огого"). Создайте раздел Command в разделе "Огого" и запишите свою команду.
                          Сообщение отредактировано: andrew.virus -
                            что то меня смущает HKEY_CURRENT_USER, а в HKEY_LOCAL_MACHINE нельзя?

                            ПС Еще не проверял, на работе нет Delphi
                              Не получается, та же реакция
                                Цитата PIKACHU @
                                Не получается, та же реакция

                                что именно не получается - добавить действие для конкретного типа файлов (папок) или бросать файлы на форму и обрабатывать их ....

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

                                ExpandedWrap disabled
                                  procedure TForm1.FormCreate(Sender: TObject);
                                  begin
                                    RestoreOldInstance:=RegisterWindowMessage('{FC9D27F6-D173-4CF6-8A9A-3A2197C72390}');
                                    Application.HookMainWindow(ApplicationMessage);
                                    if paramcount > 0 then
                                      if directoryexists(paramstr(1)) then
                                        OpenFilesFromFolder(paramstr(1))
                                      else
                                        NewTabData(paramstr(1))
                                  end;
                                   
                                  procedure TForm1.RegButtonClick(Sender: TObject);
                                  var
                                    reg: TRegistry;
                                  begin
                                    reg:=TRegistry.Create;
                                    // регистрация ассоциирования файлов с данной программой ....
                                    reg.RootKey:=HKEY_CLASSES_ROOT;
                                    reg.LazyWrite:=false;
                                    reg.OpenKey('.xxx\shell\open\command', true);
                                    // имя файла будет передавать в приложение как первый параметр
                                    reg.WriteString('', Application.ExeName + ' %1');
                                    // добавляем отображаемую иконку
                                    reg.CloseKey;
                                    reg.OpenKey('.xxx\DefaultIcon',true);
                                    // для отображения используем первую иконку в нашем приложении
                                    reg.WriteString('', Application.ExeName + ',0');
                                    // добвление пункта меню для папки с целью обработки её моей программой ....
                                    reg.CloseKey;
                                    reg.OpenKey('Directory\shell\Открыть в "ХХХ Explorer" ...\command', true);
                                    // имя папки будет передаваться в приложение как первый параметр
                                    reg.WriteString('', Application.ExeName + ' %1');
                                    reg.CloseKey;
                                    reg.free
                                  end;
                                   
                                  procedure TForm1.UnRegButtonClick(Sender: TObject);
                                  var
                                    reg: TRegistry;
                                  begin
                                    reg:=TRegistry.Create;
                                    reg.RootKey:=HKEY_CLASSES_ROOT;
                                    reg.LazyWrite:=false;
                                    reg.DeleteKey('.xxx');
                                    reg.DeleteKey('Directory\shell\Открыть в "ХХХ Explorer" ...');
                                    reg.free
                                  end;

                                з.ы.: в архиве изменненный вариант примера решения ...
                                Сообщение отредактировано: andrew.virus -

                                Прикреплённый файлПрикреплённый файлxxx_explorer_2009.04.30.zip (14.52 Кбайт, скачиваний: 127)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,2094 ]   [ 16 queries used ]   [ Generated: 4.05.24, 00:34 GMT ]