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

Вниз

WindowProc - обработка сообщений окна   Найти похожие ветки 

 
dimod   (2002-10-21 12:49) [0]

Пишу программу, которая в итоге должна нормально выгрузиться и не тормозить завершение сеанса виндовс"а при нормальном выключении компа (Пуск->Завершение работы...->Выключить компьютер).
С этой программой иногда, достаточно продолжительной время компьютер не выключается (у меня АTX) или вообще не выключается, а висит чисто "экран" и есть указатель мыши, причем все приложения как-бы завершились (в т.ч. explorer).
Может кто подскажет как правильно реагировать на событие "завершение работы", может где-то что-то не так (в WindowProc). Вот куски кода моей проги:

...

function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 0;
{ Checks for messages }
case uMsg of
... : { обработка пользовательских сообщений }
WM_CLOSE, WM_DESTROY, WM_ENDSESSION, WM_QUERYENDSESSION :
begin
// освобождение ресурсов
// ожидание завершения потоков
PostQuitMessage(0);
Exit;
end
else
Result := DefWindowProc(hWnd, uMsg, wParam, lParam)
end; { case }
end; { WindowProc }

// -----------
begin
...

RegisterServiceProcess(0,1);

while (GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
ExitProcess(0);
end.


 
Игорь Шевченко   (2002-10-21 12:53) [1]

Отладочную трассировку включать не пробовали ? Обычно помогает. В файл со сбросом буфера на диск :-)


 
dimod   (2002-10-21 13:41) [2]

Я на счет правильной последовательности обработки сообщений WM_ENDSESSION, WM_QUERYENDSESSION и WM_DESTROY хотел бы уточнить (в WindowProc)


 
Игорь Шевченко   (2002-10-21 13:51) [3]

PostQuitMessage надо посылать только на WM_DESTROY главного окна


 
dimod   (2002-10-21 17:21) [4]

Как мне обработать события WM_ENDSESSION и WM_QUERYENDSESSION,
чтобы не возникало таких сообщений типа " ... не отвечает на системные запросы", причем ... - пустое поле (и кто не отвечает - не известно, есть только подозрения на свою прогу).
Если можно, то кусочек кода вместо ???. Заранее спасибо.

function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 0;
{ Checks for messages }
case uMsg of
... : { обработка пользовательских сообщений }
WM_QUERYENDSESSION :
begin
// ?????
end;
WM_ENDSESSION:
begin
// ?????
end;
WM_DESTROY :
begin
// освобождение ресурсов
// ожидание завершения потоков
PostQuitMessage(0);
Exit;
end
else
Result := DefWindowProc(hWnd, uMsg, wParam, lParam)
end; { case }
end; { WindowProc }


 
Игорь Шевченко   (2002-10-21 17:22) [5]

Кусочки кода - в MSDN


 
dimod   (2002-10-24 13:48) [6]

Сделал так, пока работает


function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 0;
{ Checks for messages }
case uMsg of
WM_COPYDATA : ...;
WM_CLOSE :
begin
WriteToLogFile("WM_CLOSE.");
PostMessage(hWnd, WM_DESTROY, 0, 0);
end;
WM_ENDSESSION :
begin
WriteToLogFile("WM_ENDSESSION.");
if WordBool(wParam) then
begin
{ Windows is closing down - clean up!! }
MyCleanupProcedure;
Halt(0);
end;
end;
WM_DESTROY :
begin
WriteToLogFile("WM_DESTROY.");
MyCleanupProcedure;
PostQuitMessage(0);
Exit;
end;
end; { case }
Result := DefWindowProc(hWnd, uMsg, wParam, lParam)
end;



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

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

Наверх





Память: 0.46 MB
Время: 0.007 c
3-14367
kostik78ua
2002-11-18 11:17
2002.12.05
memo-поля


6-14716
Chlavik
2002-10-07 02:09
2002.12.05
Подключённый диск. IP - ?


14-14787
Владимир Белов =)
2002-11-14 21:41
2002.12.05
Сериал


14-14769
VID
2002-11-13 18:35
2002.12.05
РЕФЕРАТ - 1


8-14696
SERCAM
2002-08-18 23:52
2002.12.05
Как сделать позитив с негатива цветной плёнки?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский