![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать программе параметр?
ilya85 © (2007-08-23 00:41:00)Есть программа, к которой можно передать параметр. Допустим Winamp или любой другой проигрователь. Я знаю какой именно парамтр нужно передать, например -plyNextSong. Вопрос как передать этот парамет программе?
Чтобы запустить программу с параметром я использовал:
ShellExecute(0,nil,'1.exe',PChar(' + plynext'),nil,SW_SHOWNORMAL);
А я хочу передать программе ещё раз параметр: PChar(' + plynext'), но без запуска ещё одной копии 1.exe
Dimaxx (2007-08-23 10:51:00) [1]Winamp может принимать сообщения, которые могут управлять его работой. Достаточно найти дескриптор его окна с заголовком "Winamp v1.x" и посылать ему сообщения через SendMessage. Например, некоторые:
40029 - Open file dialog of WinAmp
40044 - Previous track button of WinAmp
40048 - Next track button of WinAmp
40045 - Play button of WinAmp
40046 - Pause/Unpause button
40047 - Stop button of WinAmp
40148 - Fast-forward 5 seconds of WinAmp
40144 - Fast- rewind 5 seconds of WinAmp
40001 - Close Winamp of WinAmp
40058 - Raise volume by 1% of WinAmp
40059 - Lower volume by 1% of WinAmp
Раз пишешь свою программу, то сделай у себя также. Перехватывай сообщения и отсеивай определенные коды и в соотвествии с ними выполняй команды.
sniknik (2007-08-23 08:47:00) [2]сорри ошибся, ParamSts это ParamStr.
sniknik (2007-08-23 08:45:00) [3]без запуска не получится, если программу запускают то она запускается....
тебе надо в ней получить параметр, после найти первую копию (если она есть), передать этот параметр ей, и завершится (если нет первой копии то запуск стандартным образом).
+ в программе для получения переданного из второй копии должна быть обработка (прием) посылки.
ничего сложно в общем то, получить параметр это см. ParamSts и связанное, искать копию FindWindow (если нет окон, то искать процесс это чуть сложнее), передать данные параметра это см. WM_COPYDATA (получить данные это этоже)
пробуй.
это кстати не единственный вариант, а только, имхо, самый простой. передачу можно организовывать разными методами, получать хендл первой копии тоже, а можно и не получать а просто организовать обмен через чтото общее (файлы, пайпы, сокеты...). можно саму программу сделать в виде сервера автоматизации, тогда можно в нем просто определить метод - "получить новый параметр", или несколько (параметр plynext (перевод особенно если написать правильно playnext) наводит на мысль о попытке внешнего управления, а вовсе о передачах параметров...)
Германн (2007-08-23 03:10:00) [4]
> Джо © (23.08.07 02:45) [11]
>
> > [10] Германн © (23.08.07 01:37)
> > В полном негодовании нажал кнопку. :)
> > Но тут именно тема "запуска второго экземпляра программы",
>
> > имхо.
>
> Еще раз подчеркну, что в [0] явно сказано следующее:
> — но без запуска ещё одной копии 1.exe
>
Дык и я о том же :)
Ну или и я и ты идём лесом! :)
Джо (2007-08-23 02:45:00) [5]> [10] Германн © (23.08.07 01:37)
> В полном негодовании нажал кнопку. :)
> Но тут именно тема "запуска второго экземпляра программы",
> имхо.
Еще раз подчеркну, что в [0] явно сказано следующее:
— но без запуска ещё одной копии 1.exe
Германн (2007-08-23 01:37:00) [6]В полном негодовании нажал кнопку. :)
Но тут именно тема "запуска второго экземпляра программы", имхо.
Германн (2007-08-23 01:33:00) [7]
> > [7] Германн © (23.08.07 01:12)
> > Тут ведь стоит курить тему "запуск второго экземпляра
> > той же самой программы". Или я не прав?
>
> Ведь человек вроде ясно написал: «но без запуска ещё одной
> копии 1.exe». Так не лучше ли передавать параметры уже запущенной
> копии?
>
Лучше, ес-сно! Но ведь (Блин! я убью морально свою дщерь, когда она вернётся с моря!)
Джо (2007-08-23 01:23:00) [8]> [7] Германн © (23.08.07 01:12)
> Тут ведь стоит курить тему "запуск второго экземпляра
> той же самой программы". Или я не прав?
Ведь человек вроде ясно написал: «но без запуска ещё одной копии 1.exe». Так не лучше ли передавать параметры уже запущенной копии?
Германн (2007-08-23 01:12:00) [9]
> Джо © (23.08.07 01:03) [6]
>
> > [3] ilya85 (23.08.07 00:46)
> > sniknik ©
> > да
>
> Тогда следует передавать параметры иным способом. Каким?
> Кури (обширную) тему Interprocess communication (IPC).
>
Эээ. А стоит ли тут "курить" тему Interprocess communication (IPC)? Тут ведь стоит курить тему "запуск второго экземпляра той же самой программы". Или я не прав?
Джо (2007-08-23 01:03:00) [10]> [3] ilya85 (23.08.07 00:46)
> sniknik ©
> да
Тогда следует передавать параметры иным способом. Каким? Кури (обширную) тему Interprocess communication (IPC).
Германн (2007-08-23 00:49:00) [11]Я очень медленно жму на клавиши :(
Германн (2007-08-23 00:47:00) [12]
> А я хочу передать программе ещё раз параметр: PChar(' +
> plynext'), но без запуска ещё одной копии 1.exe
>
Такие параметры передаются программам в командной строке и по умолчанию имеют смысл только при старте программ. Иное, относится к имеющимся у конкретной программы возможностям принять некую информацию (команду). Ищи в описании данной программы эту возможность.
ilya85 (2007-08-23 00:46:00) [13]sniknik ©
да
sniknik (2007-08-23 00:45:00) [14]запускаемую программу (1.exe) ты сам пишешь?
Джо (2007-08-23 00:43:00) [15]Параметры коммандной строки передаются программе при ее запуске.