![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| iddqd |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: нет Всего: 2 |
Программа к которой я подключаю совй плагин не умеет обрабатывать сообщения. Я хочу написать плагин, который бы делал это. Итоговая цель сделать примерно так, как в Winamp я нахожу окно и отправляю ему какое-либо сообщение и мне возвращает нужные мне данные, например длину текущего трека.
Как мне реализовать такое самостоятельно если это вобще возможно сделать через плагин? Хотелось бы пример самой простой функции. -------------------- |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Я бы создал окно , которое ловилобы мессаги, имхо можно, даже где то видел без окна такое -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| iddqd |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: нет Всего: 2 |
Я бы тоже так сделали если бы мне объяснили как их ловить и отвечать на них. Собсна в этом и была суть вопроса. -------------------- |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| iddqd |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: нет Всего: 2 |
Спасибо, но мне всё это сложно понять и разобрать, не силён я в С++ и WinAPI, вот если бы кто-нибудь написал простейший пример... :\ Это сообщение отредактировал(а) iddqd - 7.3.2006, 14:47 -------------------- |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Упс ошибочка вышла насчет языка , щаз еще чет поищем
А здеся учить это надо будет если хошь то что задумал написать. PS щаз пороюсь еще Добавлено @ 14:58 http://web.ict.nsc.ru/~cancel/delphi/realapp.html Добавлено @ 14:59 http://web.ict.nsc.ru/~cancel/delphi/msg.html Добавлено @ 15:00 http://www.firststeps.ru/mfc/winapi/win/apiwind1.html Добавлено @ 15:05 http://www.drkb.ru/ -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| iddqd |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 16.11.2005 Репутация: нет Всего: 2 |
Спасибо за ссылки.
Использую следующую функцию из рекомендованных ссылок.
Но код не рабочий. -------------------- |
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
А что шлешь? (код где?)
Имхо надо юзать не а WM_USER+N (любое целое число) Добавлено @ 16:48 не увидел этого но лучше не 999, а WM_USER+999 ShowMessage , ненадо юзать , если хошь , то
Добавлено @ 16:50
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
| Romero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Romikgy, подскажи, как лучше организовать следующее:
Есть служба MyService.exe, есть обычная прога MyProg.exe (которая запускается непосредственно самой службой). Нужно с определенной периодичностью отсылать некоторое сообщение от MyService окну программы (хэндл известен из функции ее запуска, CreateProcess, например), ждать некоторое время и если не получен ответ (соответственно, в самой проге нужно реализовать прием и отправку сообщений), убивать процесс MyProg и запускать заново. Очень важный момент: вся эта махинация нужна не только для контроля присутствия в памяти MyProg.exe (если вдруг случайно вылетит), но и для выявления зависания (если прога запущена, но зависла, то она не должна отвечать на сообщения службы). Поступили предложения организовать это через pipe или через системные сообщения. Как лучше, проще и надежнее в данной ситуации? Если не сложно, |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Romero, имхо сначало надо читать правила
один топик один вопрос! А по существу, я бы делал через мессаги, только если возможен неответ , то вместо SendMessage я бы юзал PostMessage, а подтверждение делал бы из сообщения юзал бы за и последнее , эти все мессаги юзают хендл окна, а это дает хендл процесса , это разные вещи!!! Если надо отсылать процессу тогда юзай PostThreadMessage -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Romero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Спасибо. Как отправлять сообщение я понял. Больше интересует, как их принимать лучше всего (если использовать PostThreadMessage)?
Делать бесконечный цикл, который лезет в очередь сообщений? Или есть какое-то событие при поступлении сообщения? Это сообщение отредактировал(а) Romero - 9.3.2006, 17:39 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Имхо так , только надо в него еще внедрить обработку сообщений системы, чтоб приложение не висло -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
iddqd,
Мне кажется, что для твоей задачи будет проще создать отдельный поток, в котором обрабатывать сообщения, посылаемые PostThreadMessage. организуется такой поток очень просто. Если необходимо, приведу пример. -------------------- |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Да вот простейший пример:
-------------------- |
|||
|
||||
| Romero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Огромное спасибо! Работает. Только я разбил пример на 2 проги: одна отправляет, другая принимает.
Нужно ли делать обработку других сообщений, кроме WM_USER+1, WM_QUIT? Как мне организовать передачу ThrId от запущенной второй проги, если она зпускается из первой? При создании потока отправлять родителю сообщение тем же способом? Тогда как узнать хэндл родителя? И еще такой ньюанс: Моя программа, которая должна реагировать на отправленные ей сообщения, состоит из 2 форм. На второй форме выполняется некая процедура, которая может вызвать зависание всей проги (собственно, это я и хочу отлавливать). Так вот, если сделать отдельный поток, то при зависании он ведь наверняка сможет среагировать на сообщение, а мне это не нужно. Может, все-таки стоит мне сделать на одной из форм бесконечный цикл с проверкой? Тогда и с хэндлом будет проще - буду брать хэндл запускаемого приложения. |
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Нужно обрабатывать , только которые те нужны, ну чтоб можно было с прогой работать (типа выключить прогу) что это?
ни ля ля не понял ты мож сказать конкретно че нужно то ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
| Romero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Как сообщить родителю ThrId из BeginThread, я имел ввиду. Объянсяю конкретно: Первая прогу зависает или "вылетает". Вторая прога ("родитель" первой, т.е. первая запускается из второй) должна периодически отправлять ей сообщения и принимать ответы. В случае отсутствия ответа выполнять некие действия. Но нужно учесть, что при зависании первой проги ответ прийти не должен (вот я и интересуюсь... если в варианте с созданием отдельного потока при зависании мессага дойдет без проблем, тогда плохо). Как мне этот механизм реализовать? Вариант с созданием отдельного потока меня не устраивает по причине, выделенной жирным, и потому, что я не знаю, как сообщить идентификатор запущенного потока из первой проги второй. Это сообщение отредактировал(а) Romero - 15.3.2006, 07:16 |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Да не ответ придти не должен, а определить нужно, что программа повисла. Не так ли? Дополнительный поток получает сообщение, проверяет доступность основного потока и отвечает в запросившую программу код состояния программы. Так как первая программа дочерняя по отношению ко второй и запусается из нее, то какие проблемы определить идентификатор потока? Известен дочерний процесс. Через него и получи ид доп. потока. -------------------- |
|||
|
||||
| Romero |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Да.
Пример, плиззз. |
||||
|
|||||
| Демо |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 6 Всего: 50 |
Пожалуйста - Приложение1:
Приложение2:
Это сообщение отредактировал(а) Демо - 15.3.2006, 13:40 -------------------- |
||||
|
|||||
| Romero |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Спасибо!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |