без оконное приложение (VC)
нужно ли обрабатывать сообщения?
while(GetMessage(&msg, NULL, 0x00, 0x00))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
иначе винда рисует часики будто приложение не отвечает!
Но оно может обрабатывать сообщения, скажем от TrayIcon или обеспечивать асинхронные сокеты.
а без окна можно?
Тебе что-ли служба NT нужна? Так там не в окнах дело.
А если червь, то окно может понадобиться для асинхронных сокетов.
Да спрячь его нафиг и все дела!
Цитата:
On 2002-03-17 2343, advisor wrote
приложение которое не требует вывода на экран чего-либо. нужно брать за основу консульное приложение или Win32? (main or WinMain) (может изредка если МессаджВох или через GDI на экране чего-либо написать/нарисовать)
нужно ли обрабатывать сообщения?
while(GetMessage(&msg, NULL, 0x00, 0x00))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
иначе винда рисует часики будто приложение не отвечает!
Консольное приложение создает консольное окно, а оно тебе не нужно. Далее, сообщения, конечно, обробатывать надо, как минимум для того, чтобы среагировать на WM_QUIT, но зачем тебе делать DispatchMessage да еще и TranslateMessage, если у тебя ни одного окна нет! Создавай не консольно Win32. Окна создавать не обязательно. Хотя я, конечно, незнаю, что твое приложение еще должно делать кроме того, что ничего не выводить.
её задача получать комманды с сервера и выполнять их.
видел тему в FAQ как написть не убиваемое приложение в 9х: нужно отлавливать сообщение WM_DESTROY (кажется) и запускать вторую копию программы а эту завершать. хотелось бы это реализовать без окна!
как я понял нужно сделать Thread в нём получать и обрабатывать сообщения с сервера а в теле WinMain while(GetMessage(...)){/*пусто*/}
правильно?
Цитата:
On 2002-03-20 2353, advisor wrote
пишу программу клиент для локальной сети.
её задача получать комманды с сервера и выполнять их.
видел тему в FAQ как написть не убиваемое приложение в 9х нужно отлавливать сообщение WM_DESTROY (кажется) и запускать вторую копию программы а эту завершать.
Это если есть окно. Без окна, надо ловить сообщение WM_CLOSE.
Цитата:
как я понял нужно сделать Thread в нём получать и обрабатывать сообщения с сервера а в теле WinMain while(GetMessage(...)){/*пусто*/}
правильно?
На самом деле, сама система не постит WM_QUIT. Его постит сам поток с помощью PostQuitMessage. Так что коль у тебя нет окна, то для корректного завершения, тебе надо ловить WM_CLOSE.
А есть еще один интересный хандл: HWND_DESKTOP. Можно с ним помутить.
WinMain(...)
{
//после здесь будет CreateThread();
while(GetMessage(...))
{
MessageBeep(-1); //сюда даже не заходит!!!
//или MessageBox(...);
}
return 0;
}
Естессвенно. Месаджей то нету. Попробуй закрыть свою программу по Ctrl+Alt+Del, или запостить в нее сообщение через PostThreadMessage.
в том-то и дело что на Ctrl+Alt+Del мессаджей нету!
Ага, понятно. Значит очередь сообщений сама не создается. Ладно, сейчас разберемся.
Вывод: WM_CLOSE без окна не поймаешь, так что и корректно завершиться тоже не удастся(если тебе это нужно). Можно, конечно спрятать процесс, чтобы его так не закрывали, и надеется, что сообщение о завершении сессии он все-таки постит with PostThreadMessage. А можно просто создать невидимое окно.
Скрою процесс.