Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Контекстное меню проводника


ford ©   (2016-08-26 09:50:00) 

Доброго времени суток!
Хочу добавить в контекстное меню проводника возможность открывать свою программу и передать ей выделенные в проводнике файлы в качестве параметра(ов). Нашел что можно для типа фалов установить свою команду в реестре. Так и сделал:
HKEY_CLASSES_ROOT\FoxitReader.Document\Shell\contmenu\command
в дефолт парамере прописал свою программку и праметр %1
все ОК, но для одного файла.
Если я выбираю в проводнике группу файлов и взываю этот пункт из контекстного меню, то открывается столько копий моей программы, сколько я выбрал файлов.
Как сделать, чтобы при выборе в проводнике группы файлов, и запуске пункта контекстного меню, программа открывалась в одном экземпляре и файлы передавались туда списком?
Нашел что можно как-то через меню SendTо, но как? как программа получит этот список файлов? через drag'N'drop?
Подскажите плииз.


ford   (2016-08-26 14:24:00) [1]

Сделал как подсказал
>>sniknik ©   (26.08.16 11:49) [1]

так единственный вариант без особых заморочек получился, хотя пришлось помучиться.
Т.к. первый экземпляр, открылся, взял переданный ему в параметре файл, и начал его обрабатывать, в это же время следующие экземпляры нашли окно, и передали ему имена файлов из своих параметров.
Но первая программа то уже занимается обработкой. Пишлось обработку запихнуть в поток, который при завершении обработки одного файла, опрашивает список файлов, и если там пусто то завершается.


KSergey   (2016-08-26 13:10:00) [2]

> sniknik ©   (26.08.16 11:49) [1]
> > файлы передавались туда списком?
> при получении параметра проверяй на наличие уже запущенной
> копии программы и посылай имя файла туда.

Вариант интересный.
Правда есть нюанс: для плейеров - да, достаточно всё в один список пихать.
А вот для e-mail клиента, например, нужно уметь разделять списки "отправленных в него" файлов. Т.е. выделил группу файлов - по ним одно письмо открылось с вложением; выделил другую группу - другое письмо должно суметь сформироваться.

По делу - не знаю что ответить.


sniknik   (2016-08-26 11:51:00) [3]

> посылай имя файла туда.
собственно в программе (запущенной копии) должен быть "приемник" в котором формируется список. все плейеры так работают (ИМХО, других не видел).


sniknik   (2016-08-26 11:49:00) [4]

> файлы передавались туда списком?
при получении параметра проверяй на наличие уже запущенной копии программы и посылай имя файла туда.
> SendTо
можно так
SendMessage(RunProgramHandle, WM_COPYDATA, 0, LParam(@name));


Наверх

Титульная страница Поиск, карта сайта Написать письмо