Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

Цикл выборки сообщений в безоконном приложении   Найти похожие ветки 

 
Aldor_   (2004-07-11 12:35) [0]

Если у меня безоконное приложение, то надо ли в цикле выборки сообщений (while GetMessage(WinMessage, 0, 0, 0) do) писать TranslateMessage и DispatchMessage, ведь вроде некому диспатчить-то.


 
Anatoly Podgoretsky ©   (2004-07-11 13:12) [1]

Отсюда мораль - сделай окно


 
Aldor_   (2004-07-11 13:22) [2]

Anatoly Podgoretsky ©   (11.07.04 13:12) [1]

 А смысл? Серьезно, зачем делать окно, если оно никак не будет использоваться, разве что для того, чтобы было кому диспатчить? :)))))


 
Piter ©   (2004-07-11 14:58) [3]

нет, не надо писать.

Да и вообще, если приложение безоконное - то нафига вообще мучиться с выборкой сообщений? :)

Что интересно делает твое безоконное приложение? :)


 
Piter ©   (2004-07-11 15:00) [4]

Вообще приложении без окна... зачем оно?


 
Aldor_   (2004-07-11 15:30) [5]

Piter ©

 ИМХО, безоконные приложения вполне обычны - сидит резидентом, выполняет свои функции, выборка сообщений - ловить WM_TIMER, например.

 Но мне просто интересно, что будет делать DispatchMessage, если ему отдать "ThreadMessage".
 Тоже самое TranslateMessage: могут ли вообще приходить клавиатурные сообщения безоконному приложению в обычных случаях (кроме тех, когда такое сообщение шлется специально).
 Вроде бы ответ очевиден, но включается "а Гейтс его знает", вот и удостоверяюсь.


 
Piter ©   (2004-07-11 16:47) [6]

Aldor_   (11.07.04 15:30) [5]
сидит резидентом, выполняет свои функции


вот и интересно - какие такие функции, а? :)


Но мне просто интересно, что будет делать DispatchMessage

Ничего не будет делать. Ты же ему передаешь структуру TMsg, а там прописан Handle окна. В случае Thread Message там будет 0. Соответственно, DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.


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

не могут. Безоконному приложению вообще не будут приходить никакие сообщения, если не "попросить" систему об этом.


 
Anatoly Podgoretsky ©   (2004-07-11 17:09) [7]

Aldor_   (11.07.04 13:22) [2]
Для того чтобы принимать сообщения


 
jack128 ©   (2004-07-11 17:28) [8]


> вот и интересно - какие такие функции, а? :)
FBServer, например..


 
Igorek ©   (2004-07-11 17:53) [9]


> Безоконному приложению вообще не будут приходить никакие
> сообщения, если не "попросить" систему об этом.

А как, если не секрет?


 
jack128 ©   (2004-07-11 19:55) [10]


> А как, если не секрет?
PortThreadMessage


 
Sha ©   (2004-07-11 22:04) [11]

> Если у меня безоконное приложение, то надо ли в цикле выборки
> сообщений (while GetMessage(WinMessage, 0, 0, 0) do) писать
> TranslateMessage и DispatchMessage, ведь вроде некому диспатчить-то.

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


 
Aldor_   (2004-07-12 04:23) [12]

> Piter ©   (11.07.04 16:47) [6]
вот и интересно - какие такие функции, а? :)

Периодическая проверка инсталленного софта и его версий, при логоне - проверка устройств. При наличии изменений - сигнализация серверу.

> DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.

 Вот в этом и хотел удостоверится. И, елис не секрет, откуда такая инфа (хотя я, конечно, понимаю, что все это тривиально).

Anatoly Podgoretsky ©   (11.07.04 17:09) [7]
> Для того чтобы принимать сообщения

 А разве обязательно для этого окно? Или Вы шутите? :)))))

Sha ©   (11.07.04 22:04) [11]
> Учти, что все сообщения, посланные до первого GetMessage будут потеряны.

 Вот это интересно, а какие это могут быть сообщения? И, кстати, разве нет такого понятия, как _очередь_ сообщений?


 
Sha ©   (2004-07-12 07:55) [13]

> кстати, разве нет такого понятия, как _очередь_ сообщений?

Для треда это понятие появляется после сделанной им первой попытки выбрать сообщения из очереди :)


 
Sha ©   (2004-07-12 07:59) [14]

> а какие это могут быть сообщения?

Это те сообщения, которые ты успел послать треду до его перехода в цикл выборки сообщений.


 
Sha ©   (2004-07-12 08:07) [15]

>> DispatchMessage никуда не будет перенаправлять данное сообщение. Вот и все.

> Вот в этом и хотел удостоверится.

Кстати, чтобы DispatchMessage перенаправлял сообщения созданному тобой окну, ты можешь ручками в hwnd приятого сообщения исправить 0 на нужный хэндл. Так удобно делать, если все-таки захочешь создать окно. Вся логика будет в одном месте :)

Для потомка TThread еще можно использовать просто Dispath, чтобы вызывать его методы обработки сообщений.


 
Aldor_   (2004-07-12 08:18) [16]

> Это те сообщения, которые ты успел послать треду до его перехода в цикл выборки сообщений.

 А только ли я? Мой вопрос состоял в том, что не шлет ли система каких-либо сообщений треду?

Sha ©   (12.07.04 07:59) [14], [15]
 Сэнкс за рязъяснения.


 
Sha ©   (2004-07-12 09:42) [17]

> Мой вопрос состоял в том, что не шлет ли система каких-либо сообщений треду?

Не шлет.


 
Aldor_   (2004-07-12 11:08) [18]

Угу, еще раз сэнкс.


 
Alex Konshin ©   (2004-07-12 11:12) [19]

Piter ©   (11.07.04 16:47) [6]
Ты заблуждаешься. Для приема сообщений необязательно наличия окна. Дело в том, что сообщение можно послать нити, и неважно, есть ли окно, связанное с ней или нет.
К вопросу о том, зачем это может быть нужно: посмотри, как работают с Winsock 1.x.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
14-1091463326
Cerberus
2004-08-02 20:15
2004.08.22
Linux под Win


6-1087806476
inface
2004-06-21 12:27
2004.08.22
Работа с idTCPServer и idTCPClient.


3-1091005053
Manfred
2004-07-28 12:57
2004.08.22
TClientDataSet.Locate ничего не находит


14-1091621884
sucer
2004-08-04 16:18
2004.08.22
Странный глюк на рабочем столе WinXP


6-1087482978
P@vel
2004-06-17 18:36
2004.08.22
Socket Messages





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский