Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > SendMessage


Автор: gonzales 7.9.2006, 12:34
Вопрос след. характера, как послать сообщение процессу, который меняет свое название.
например Winamp, сразу после загрузки его процесс ищется так 
Код

FindWindow(nil,'Winamp 5.01');


и нет никаких проблем послать ему что-то типа 
Код

Sendmessage(Handle,WM_USER,0,101) //нажатие кнопки Play

но, сразу после включения композиции процесс винампа определяется как '01 - xxxx - winamp'

и каким образом мне отловить его хандл???

Автор: Alexeis 7.9.2006, 12:36
gonzales, лучше использовать как раз первый а не второй параметр findWindow, поскольку это имя класса окна - параметр который не меняется со временем, а второй как раз можно установать в nil.

Автор: Yanis 7.9.2006, 12:44
Вся проблема в том, что процессы не получают сообщений.

Добавлено @ 12:46 
Класс окна Winamp - "Winamp v1.x"

Автор: gonzales 7.9.2006, 12:51
Цитата(Yanis @  7.9.2006,  12:44 Найти цитируемый пост)
Класс окна Winamp - "Winamp v1.x"


спасибо, я встечал в нете такую фразу, но думал, что просто инфа допотопная smile, действительно, хандл получен


Цитата(Yanis @  7.9.2006,  12:44 Найти цитируемый пост)
Вся проблема в том, что процессы не получают сообщений


а кто получает сообщения (это так, для общего развития), приложения?

Автор: Snowy 7.9.2006, 12:56
Да нет. Процессы тоже получают сообщения. Не оконные, но получают (PostThreadMessage как раз для этого и предназначен).
Но винамп ловит окном. Искать его нужно по крассу окна, а не по заголовку.
Но это уже написали...

Автор: Yanis 7.9.2006, 13:00
Ну так процесс и поток суть разные понятия.

Автор: gonzales 7.9.2006, 13:20
ну и напоследок вдогонку уважаемым экспертам вопрос,
чем отличаются sendmessage и postmessage?

Автор: dumb 7.9.2006, 13:24
Цитата(MSDN)

The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. 

To send a message and return immediately, use the SendMessageCallback or SendNotifyMessage function. To post a message to a thread's message queue and return immediately, use the PostMessage or PostThreadMessage function.

Автор: Snowy 7.9.2006, 13:46
Send отправляет и ждёт ответа.
Post ответа не ждёт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)