Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.140.198.173] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Выделяем НЕСКОЛЬКО файлов в проводнике, зарегистрированых за моей прогой, нажимаем Enter и почему то передается только выделеный файл, как передать все файлы моей программе
ПС спосибо за уделенное время |
Сообщ.
#2
,
|
|
|
Регистрировать свое расширение оболочки реализующее интерфейс IShellExtInit и в IShellExtInit.Initialize брать все выделенные элементы и передавать своей программе.
|
Сообщ.
#3
,
|
|
|
А через парамстр ни как? Я боюсь ета ерунда систему тормозить будет.
|
Сообщ.
#4
,
|
|
|
Винда производит последовательные вызовы
YourProgram.exe C:\File1.ext YourProgram.exe C:\File2.ext YourProgram.exe C:\File3.ext |
Сообщ.
#5
,
|
|
|
PIKACHU для запрета запуска второй копии программы посмотри эту тему ...
передавать данные между экземплярами можно, например, используя сообщение WM_COPYDATA ... |
Сообщ.
#6
,
|
|
|
PIKACHU пример, который выполняет требуемое тебе в прилагаемом архиве ...
он открывает в одном приложении несколько файлов (новая копия отсылает параметр и закрывается) ... надеюсь поможет ... Прикреплённый файлxxx_explorer.zip (6.9 Кбайт, скачиваний: 194) |
Сообщ.
#7
,
|
|
|
Класно, то что надо), только есть одно но, в папке не роется(
|
Сообщ.
#8
,
|
|
|
Цитата PIKACHU @ класно, то что надо), только есть одно но, в папке не роется( а зачем рыться? можно вызывать файлы простым анализом выделенной группы файлом из проводника ... а если нужно как ты говоришь "рыться в папке", то перебирай их, например, методами описанными в этой статье ... |
Сообщ.
#9
,
|
|
|
В том то и дело что при отрытии группы файлов, зарегеные файлы открываются как надо, а папка открывается в эксплоере, мож надо как то регить папку?
|
Сообщ.
#10
,
|
|
|
Цитата PIKACHU @ В том то и дело что при отрытии группы файлов, зарегеные файлы открываются как надо, а папка открывается в эксплоере, мож надо как то регить папку? написанно не совсем понятно - попробую потелепатить немного, если проравильно понял, то нужно такое ... при выборе из программы папки на открытие программа перебирает все файлы зарегистрированного типа в ней и открывает их ... для реализации этого можно использовать такой код: 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) |
Сообщ.
#11
,
|
|
|
Не то, поиск я знаю как сделать, например(смотреть в картинку), файлы типа xxx открываются в программе а папка test folder открывается в эксплоеере надо чтоб эксплоер передовал путь папки.
Прикреплённый файлtest.JPG (75.36 Кбайт, скачиваний: 435) |
Сообщ.
#12
,
|
|
|
Цитата PIKACHU @ Не то, поиск я знаю как сделать, например(смотреть в картинку), файлы типа xxx открываются в программе а папка test folder открывается в эксплоеере надо чтоб эксплоер передовал путь папки. такой реакции для папок можно добиться если зарегистрировать для меню "Открыть с помощью ..." твое приложение (раздел, если не ошибаюсь [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.directory\OpenWithList]) ... но если просто бросать файлы на форму приложения и обрабатывать их то посмотри материалы этой темы ... еще один вариант решения задачи это регистрация для папок пункта меню "Открыть в MyProject" для контекстного меню ... Цитата создать команду, применимую к любой папке, диску и т.п. В разделе HKEY_CLASSES_ROOT\Folder\shell создайте новый раздел, назвав его своим именем (например "Огого"). В параметре "По умолчанию" задайте имя команды (например "Команда Огого"). Создайте раздел Command в разделе "Огого" и запишите свою команду. |
Сообщ.
#13
,
|
|
|
что то меня смущает HKEY_CURRENT_USER, а в HKEY_LOCAL_MACHINE нельзя?
ПС Еще не проверял, на работе нет Delphi |
Сообщ.
#14
,
|
|
|
Не получается, та же реакция
|
Сообщ.
#15
,
|
|
|
Цитата PIKACHU @ Не получается, та же реакция что именно не получается - добавить действие для конкретного типа файлов (папок) или бросать файлы на форму и обрабатывать их .... можно сделать также переписав функции ассоциирования приложения с файлами и обработчик OnCreate таким образом ... 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; з.ы.: в архиве изменненный вариант примера решения ... Прикреплённый файлxxx_explorer_2009.04.30.zip (14.52 Кбайт, скачиваний: 127) |