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

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

Передать commandline


Страницы:   1 2

Gu ©   (2011-09-26 13:51:00) 

Вот есть например Ms.Word. Кликаем в проводнике на какойнибудь документ, он окрывается в окне ворда. Кликаем на другой он открывается в новой вкладке этого же окна. Т.е. приложение не закрывается и не новое окно открывается. Или например WMPlayer (или Windows Media player Classic - там опция есть "один проигрыватель для каждого файла") - запускаем какой нибудь avi, открывается Wmp, запускаем другой - новое воспроизведение в этом же окне.

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


QAZ   (2011-09-26 19:26:00) [21]

незнай как с VCL,у меня на чистом апи все норм


Rouse_   (2011-09-26 19:23:00) [22]


> QAZ   (26.09.11 19:11) [17]
> то Rouse_ ,незнаю чего у вас не получилось,но оно как работало,
> так и работает и в 7ке тоже

Я сам этой проблемой не занимался, там Макс Черных и jack128 копался, но судя по их словам что-то поменялось в DDE (вполне вероятно что и в VCL-реализации сервера, но не суть, я в тонкости не вникал). Само по себе все работает, за исключением некоторых частных случаев, если интересно, то завтра могу уточнить у ребят, в SVN код должен был остаться...


QAZ   (2011-09-26 19:11:00) [23]


> Что ж ты ни одного способа не озвучил? Или ты из тех, которые
> отвечающих лечат?

я просто смотрю кому зазря медали раздают :)
вот первый способ озвучили
>Rouse_ ©   (26.09.11 18:11) [14]
> Игорь Шевченко ©   (26.09.11 18:11) [15]
маладца, им медальки можно :)
а вот у
> Юрий Зотов ©   (26.09.11 17:56) [13]
срочно забрать ;)

то Rouse_,незнаю чего у вас не получилось,но оно как работало,так и работает и в 7ке тоже

а теперь дружно угадайте каким макаром дельфя открывает файлы...

зы
ну а второй способ логично вытекает из первого что пришло на замену DDE?


Jeer   (2011-09-26 18:24:00) [24]


> А "передасть сообщение с параметром"


А ведь скажут у Jeer-a с русским плохо :)


Игорь Шевченко   (2011-09-26 18:11:00) [25]


>  Больше проводник не сделает ничего, сколько его ни проси.


DDE может сделать


Rouse_   (2011-09-26 18:11:00) [26]

До висты мы делали через DDE, но потом начались проблемы из-за изменений в самом DDE (уже не помню точно, толи с ярлыка перестало правильно запускаться, толь из кучи файлов приходил только первый, давно было...) и перешли тоже на WM_COPYDATA.


Юрий Зотов   (2011-09-26 17:56:00) [27]


> QAZ   (26.09.11 16:59) [11]

> все что нужно передаст сам проводник если его попросить при
> регистрации типа файла в системе

Проводник запустит ВТОРУЮ копию программы и параметр передаст ЕЙ . Больше проводник не сделает ничего, сколько его ни проси.

Поэтому все, что нужно сделать, вторая копия должна сделать САМА , никто за нее ничего делать не будет. А сделать она должна именно то, что Вы и написали: "обнаружить уже имеющийся экземпляр и передасть ему сообщение с параметром, после чего мирно уйти в небытие".

Конечно, уведомление первой копии не обязательно делать именно в виде сообщения, можно использовать и другие механизмы. Но и сообщение - это тоже вполне нормальный способ. А вовсе не "0нальный".

> Gu

На "Королевстве" есть статья Антона Григорьева, в которой Ваша задача подробно разобрана. С объяснениями, с работающим примером и его кодом. Называется она как-то так: "Обобщающие примеры работы с WinAPI". Там три статьи с таким названием, но разных авторов - Вам нужен пример Антона.


Плохиш   (2011-09-26 17:10:00) [28]


> QAZ   (26.09.11 15:52) [9]
>
>
> > На делфимастере эта тема обсасывается каждые полгода.
>
> ага и каждые полгода советуют

Врать не надо, много уже и кода давалось.

> хотя ни одна из серьезных программ так не делает, а есть
> как минимум 2 вменяемых способа

Что ж ты ни одного способа не озвучил? Или ты из тех, которые отвечающих лечат?

> QAZ   (26.09.11 16:59) [11]
>
>
> > Юрий Зотов ©   (26.09.11 16:40) [10]
>
> тем, что это 0нальный способ,все что нужно передаст сам
> проводник если его попросить при регистрации типа файла
> в системе

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


QAZ   (2011-09-26 16:59:00) [29]


> Юрий Зотов ©   (26.09.11 16:40) [10]

тем, что это 0нальный способ,все что нужно передаст сам проводник если его попросить при регистрации типа файла в системе


Юрий Зотов   (2011-09-26 16:40:00) [30]


> QAZ   (26.09.11 15:52) [9]

А "передасть сообщение с параметром" - чем плохо?


QAZ   (2011-09-26 15:52:00) [31]


> На делфимастере эта тема обсасывается каждые полгода.

ага и каждые полгода советуют

> Запустить экземпляр, обнаружить уже имеющийся экземпляр
> и передасть ему сообщение с параметром, после чего мирно
> уйти в небытие.

хотя ни одна из серьезных программ так не делает, а есть как минимум 2 вменяемых способа


Dimka Maslov   (2011-09-26 15:31:00) [32]

Лично у меня обычно делается так.

Первый экземпляр создаёт дополнительное невидимое окно с нечленораздельным именем класса.

Все последующие экземпляры сначала ищут то самое окно. Найдя его они создают Atom с текстом командной строки, передают его окну и мирно завершают работу.

Первый экземпляр, получив такое сообщение, преобразует Atom назад в строку и принимает необходимые меры.

Можно, конечно и через маппинг, но атомами кидаться проще.


Плохиш   (2011-09-26 14:39:00) [33]

На делфимастере эта тема обсасывается каждые полгода.


Gu   (2011-09-26 14:17:00) [34]

спасибо! ща буду пробовать.
вот еще нашел через файлмаппинг: http://delphiworld.narod.ru/base/send_cmd_s_to_f.html


И. Павел   (2011-09-26 14:13:00) [35]

хотя вот эта ссылка лучше. Тут полнее описано:
http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm


И. Павел   (2011-09-26 14:11:00) [36]

> [3] Gu   (26.09.11 14:08)

http://www.cyberguru.ru/programming/delphi/delphi-faq-page75.html


Gu   (2011-09-26 14:08:00) [37]

вот через мутексы определяю, что запускается вторая копия, а как передать командную строку?


Jeer   (2011-09-26 13:57:00) [38]

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


И. Павел   (2011-09-26 13:55:00) [39]

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


Страницы:   1 2

Наверх

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