Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка сообщений. Плагины. 
:(
    Опции темы
iddqd
Дата 7.3.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



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


--------------------
PM MAIL   Вверх
Romikgy
Дата 7.3.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(iddqd @ 7.3.2006, 12:40 Найти цитируемый пост)
Как мне реализовать такое самостоятельно если это вобще возможно сделать через плагин?

Я бы создал окно , которое ловилобы мессаги,
имхо можно, даже где то видел без окна такое smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
iddqd
Дата 7.3.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Цитата(Romikgy @ 7.3.2006, 13:44 Найти цитируемый пост)
Я бы создал окно , которое ловилобы мессаги,
имхо можно, даже где то видел без окна такое


Я бы тоже так сделали если бы мне объяснили как их ловить и отвечать на них. Собсна в этом и была суть вопроса.



--------------------
PM MAIL   Вверх
Romikgy
Дата 7.3.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
iddqd
Дата 7.3.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Цитата(Romikgy @ 7.3.2006, 14:34 Найти цитируемый пост)
http://forum.vingrad.ru/index.php?showtopic=86452&hl=

Спасибо, но мне всё это сложно понять и разобрать, не силён я в С++ и WinAPI, вот если бы кто-нибудь написал простейший пример... :\

Это сообщение отредактировал(а) iddqd - 7.3.2006, 14:47


--------------------
PM MAIL   Вверх
Romikgy
Дата 7.3.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Упс ошибочка вышла насчет языка , щаз еще чет поищем smile
Цитата(iddqd @ 7.3.2006, 13:45 Найти цитируемый пост)
не силён я


Цитата(iddqd @ 7.3.2006, 13:45 Найти цитируемый пост)
WinAPI

А здеся учить это надо будет если хошь то что задумал написать.

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/


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romikgy
Дата 7.3.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
iddqd
Дата 7.3.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: нет
Всего: 2



Спасибо за ссылки.
Использую следующую функцию из рекомендованных ссылок.

Код

function WindowProc(wnd:HWND; Msg : Integer; wParam: WPARAM; lParam: LPARAM):LRESULT; stdcall;
var nCode, ctrlID : word;
begin
case msg of
  WM_COMMAND : begin
    nCode:=HIWORD(wParam);
    ctrlID:=LOWORD(wParam);
    case ctrlID of
      IDCANCEL : begin
        DestroyWindow(wnd);
        result := 0;
      end;
      else result := 1;
    end;
  end;


  WM_DESTROY : begin
    postquitmessage(0);
    Result:=0;
  end;

 999: ShowMessage('Поймали'); //ловлю своё сообщение

  else Result:=DefWindowProc(wnd,msg,wParam,lParam);
end;


Но код не рабочий. smile


--------------------
PM MAIL   Вверх
Romikgy
Дата 7.3.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



А что шлешь? (код где?)
Имхо надо юзать не
Цитата(iddqd @ 7.3.2006, 15:39 Найти цитируемый пост)
WM_COMMAND

а WM_USER+N (любое целое число)
Добавлено @ 16:48
Цитата(iddqd @ 7.3.2006, 15:39 Найти цитируемый пост)
999: ShowMessage('Поймали'); //ловлю своё сообщение

не увидел этого smile
но лучше не 999, а WM_USER+999
ShowMessage , ненадо юзать , если хошь , то
Код

int MessageBox(

    HWND hWnd,    // handle of owner window
    LPCTSTR lpText,    // address of text in message box
    LPCTSTR lpCaption,    // address of title of message box  
    UINT uType    // style of message box
   );

Добавлено @ 16:50
Код

Range    Meaning
0 through WM_USER - 1    Messages reserved for use by Windows.
WM_USER through 0x7FFF    Integer messages for use by private window classes.
0x8000 through 0xBFFF    Messages reserved for future use by Windows.
0xC000 through 0xFFFF    String messages for use by applications.
Greater than 0xFFFF    Reserved by Windows for future use.



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romero
Дата 9.3.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: 1
Всего: 1



Romikgy, подскажи, как лучше организовать следующее:
Есть служба MyService.exe, есть обычная прога MyProg.exe (которая запускается непосредственно самой службой).
Нужно с определенной периодичностью отсылать некоторое сообщение от MyService окну программы (хэндл известен из функции ее запуска, CreateProcess, например), ждать некоторое время и если не получен ответ (соответственно, в самой проге нужно реализовать прием и отправку сообщений), убивать процесс MyProg и запускать заново.
Очень важный момент: вся эта махинация нужна не только для контроля присутствия в памяти MyProg.exe (если вдруг случайно вылетит), но и для выявления зависания (если прога запущена, но зависла, то она не должна отвечать на сообщения службы).

Поступили предложения организовать это через pipe или через системные сообщения. Как лучше, проще и надежнее в данной ситуации? Если не сложно, smile
PM   Вверх
Romikgy
Дата 9.3.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Romero, имхо сначало надо читать правила smile
один топик один вопрос!

А по существу, я бы делал через мессаги, только если возможен неответ , то вместо SendMessage я бы юзал PostMessage, а подтверждение делал бы из
Цитата(Romero @ 9.3.2006, 09:30 Найти цитируемый пост)
MyProg

сообщения юзал бы за
Цитата(Romikgy @ 7.3.2006, 15:45 Найти цитируемый пост)
WM_USER

и последнее , эти все мессаги юзают хендл окна, а
Цитата(Romero @ 9.3.2006, 09:30 Найти цитируемый пост)
(хэндл известен из функции ее запуска, CreateProcess, например)

это дает хендл процесса , это разные вещи!!!
Если надо отсылать процессу тогда юзай PostThreadMessage


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romero
Дата 9.3.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: 1
Всего: 1



Спасибо. Как отправлять сообщение я понял. Больше интересует, как их принимать лучше всего (если использовать PostThreadMessage)?

Делать бесконечный цикл, который лезет в очередь сообщений? Или есть какое-то событие при поступлении сообщения?

Это сообщение отредактировал(а) Romero - 9.3.2006, 17:39
PM   Вверх
Romikgy
Дата 9.3.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Romero @ 9.3.2006, 16:06 Найти цитируемый пост)
Делать бесконечный цикл, который лезет в очередь сообщений

Имхо так , только надо в него еще внедрить обработку сообщений системы, чтоб приложение не висло


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romikgy
Дата 9.3.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Демо
Дата 9.3.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



iddqd,

Мне кажется, что для твоей задачи будет проще создать отдельный поток, в котором обрабатывать сообщения, посылаемые PostThreadMessage.
организуется такой поток очень просто.
Если необходимо, приведу пример.



--------------------
    
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.