Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2011, 13:18   #1
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
Радость Консольное приложение без окна

Давно не кодил и уже многое подзабыл

Имеем обычное консольное приложение только без окна
При запуске входит в цикл и в нем всё время работает
необходимо отловить момент закрытия приложения (завершения работы ОС) и выполнить некоторые действия

как сие правильно реализовать
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 21.03.2011, 13:24   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Завершение работы приложения системой можно отследить только по оконному сообщению WM_DESTROY.
Создаете окно посредством винапи и назначаете ему обработчик сообщений.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.03.2011, 13:26   #3
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

спасибо!
буду пробовать

Я так понял что для перехвата сообщения WM_DESTROY
необходимо создать окно и через WindowProc уже ловить
но мне не нужно окно (даже скрытое)
как быть?
Никто не знает больше чем не знаю я

Последний раз редактировалось Stilet; 21.03.2011 в 14:37.
Nester вне форума Ответить с цитированием
Старый 21.03.2011, 13:37   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Без окна - никак.
Создаете окно CreateWindows, назначаете ему WindowProc, и в нем отлавливаете одно-единственное сообщение... Кода на 20 строк максимум, всё просто.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.03.2011, 13:41   #5
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

Согласен что просто!
Но хотел без окна - наверно есть способы но они ещё геморнее
Спасибо за помощь!
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 21.03.2011, 14:05   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

я бы попробовал типа такого:

PHP код:
program
  Project1
;

{
$APPTYPE CONSOLE}

uses
  Windows
Messages;

var
  
mMSG;
  
jobDoneboolean;
begin
  
//
  
repeat
    
//
    // do another piece of out job
    // ...
    // check if shutdown was requested
    
while (PeekMessage(m000PM_REMOVE)) do begin
      
//
      
case (m.messageof

        WM_QUERYENDSESSION
:     ;
                  
//
                  // return true and terminate the application
                  //
      
end;
    
end;
    
//
  
until (jobDone);
  
//
end
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 21.03.2011, 14:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я бы попробовал типа такого:
Врядли... Окна то нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2011, 14:52   #8
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
По умолчанию

У меня не заработало (Win7)
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 21.03.2011, 15:09   #9
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

И не должно было заработать. Без ОКНА невозможно принять ОКОННЫЕ сообщение... Собсна на то они и оконные...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.03.2011, 15:17   #10
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Будет работать
Код:
uses Windows, Messages;

function MsgProc(wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Case Msg of
    WM_TIMER: if MessageBox(0, 'Продолжить?', '', MB_YESNO + MB_ICONQUESTION) = IDNO then halt;
  End;
end;

var Msg: TMsg;
    hTimer: DWord;

begin
  hTimer := SetTimer(0, 12345, 2000, nil);
  while GetMessage(Msg, 0, 0, 0) do
     MsgProc(Msg.hwnd, Msg.message, Msg.wparam, Msg.lparam);
end.
Вот такая заковыка есть http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx, но может это относится только к потокам? (remarks - винда не создаёт очередь обработки сообщений для потока и предлагается вызвать PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) to force the system to create the message queue)
пыщь
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запустить консольное приложение, без окна, типа Hide? XerSon Общие вопросы Delphi 4 28.02.2011 10:33
Консольное приложение shock-in Общие вопросы Delphi 2 19.12.2009 22:03
Приложение без окна с иконкой в трее kiloz Win Api 10 15.01.2009 19:21
Консольное приложение a_priori Общие вопросы Delphi 6 12.03.2008 08:33
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12