![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контекстное меню проводника
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));