Форум: "WinAPI";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
ВнизПрограммма закрывается, но shutdown прекращается :( Найти похожие ветки
← →
fidget (2002-04-05 15:09) [0]Программка висит в трее(LMDTrayIcon), если Винде (w2k) делала restart или shutdown, то программа не закрывалась..
Посмотрела архивы форума, добавила 2 процедуры на WM_ENDSESSION и WM_QUERYENDSESSION - программа закрывается, но shutdown/restart приостанавливаются ... почему?
← →
Song (2002-04-05 15:16) [1]Ошибка в 17-ой строке :))
← →
Виктор Щербаков (2002-04-05 15:21) [2]WM_ENDSESSION и WM_QUERYENDSESSION не при чем. ОС должна завершать работу даже в том случае, если ты не обрабатываешь эти сообщения. Без кода (ну или хотя бы его каркаса) разговор получится как у Song © (05.04.02 15:16)
← →
fidget (2002-04-05 16:13) [3]unit Proba;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, lmdcont, LMDCustomComponent, LMDWndProcComponent, LMDTrayIcon,
Menus, ImgList, ExtCtrls, OleCtrls, SHDocVw, Psock, NMHttp, ShellAPI;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Checknow1: TMenuItem;
Exit1: TMenuItem;
ImageList2: TImageList;
Timer1: TTimer;
NMHTTP1: TNMHTTP;
LMDImageListConnector1: TLMDImageListConnector;
LMDTrayIcon1: TLMDTrayIcon;
procedure FormCreate(Sender: TObject);
procedure LMDTrayIcon1DblClick(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Checknow1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure NMHTTP1Failure(Cmd: CmdType);
procedure NMHTTP1Success(Cmd: CmdType);
protected
procedure QueryProcend(var Msg: TMessage); message WM_QUERYENDSESSION;
procedure Procend(var Msg: TMessage); message WM_ENDSESSION;
private
{ Private declarations }
procedure ApplicationMinimize(Sender: TObject);
procedure ApplicationRestore(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
HTMLBody: string;
fClose: boolean;
fCreate: boolean;
counter: boolean;
implementation
uses BrProba;
{$R *.dfm}
procedure TForm1.QueryProcend(var Msg: TMessage);
begin
Msg.LParam:=ENDSESSION_LOGOFF;
Msg.Result:=1;
Close;
fShutDown:=false;
inherited;
end;
procedure TForm1.Procend(var Msg: TMessage);
begin
IF Msg.wParam=1 then begin
Close;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.WindowState:=wsMaximized;
Application.OnMinimize:=ApplicationMinimize;
Application.OnRestore:=ApplicationRestore;
fClose:=false;
fCreate:=true;
counter:=false;
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.ApplicationMinimize(Sender: TObject);
begin
Timer1.Enabled:=true;
ShowWindow(Application.Handle, SW_HIDE);
end;
procedure TForm1.ApplicationRestore(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_RESTORE);
Application.BringToFront;
Timer1.Enabled:=false;
fClose:=false;
end;
procedure TForm1.LMDTrayIcon1DblClick(Sender: TObject);
begin
LMDTrayIcon1.Animated:=false;
LMDTrayIcon1.Icon:=Form1.Icon;
If counter=false then begin
Timer1.Enabled:=false;
Form2:=TForm2.Create(Form1);
counter:=true;
Form2.ShowModal;
Form2.Free;
counter:=false;
Timer1.Enabled:=true;
end
else Form2.WebBrowser.Navigate(" http://office.ensita.net/mysql/fs.html");
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
fClose:=true;
close;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
NMHTTP1.Get(" http://office.ensita.net/mysql/mysql.cgi?newmessages");
HTMLBody:=NMHTTP1.Body;
If Pos("NEWMESSAGES", HTMLBody)<> 0 then begin
LMDTrayIcon1.Animated:=true;
end
else LMDTrayIcon1.Animated:=false;
end;
procedure TForm1.Checknow1Click(Sender: TObject);
begin
NMHTTP1.Get(" http://office.ensita.net/mysql/mysql.cgi?newmessages");
HTMLBody:=NMHTTP1.Body;
If Pos("NEWMESSAGES", HTMLBody)<> 0 then begin
LMDTrayIcon1.Animated:=false;
LMDTrayIcon1.Icon:=Form1.Icon;
If counter=false then begin
Timer1.Enabled:=false;
Form2:=TForm2.Create(Form1);
counter:=true;
Form2.ShowModal;
Form2.Free;
counter:=false;
Timer1.Enabled:=true;
end
else Form2.WebBrowser.Navigate(" http://office.ensita.net/mysql/fs.html");
end
else LMDTrayIcon1.Animated:=false;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
if fCreate then begin
fCreate:=false;
Application.Minimize;
end;
end;
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
fCreate:=true;
end;
procedure TForm1.NMHTTP1Failure(Cmd: CmdType);
begin
Timer1.Interval:=90000;
end;
procedure TForm1.NMHTTP1Success(Cmd: CmdType);
begin
Timer1.Interval:=15000;
end;
end.
← →
Song (2002-04-05 16:48) [4]Вы используйте либо WM_QUERYENDSESSION либо WM_ENDSESSION. Оба нет смысла. И зачем Вы делаете и там Close и там Close?
Вероятно ошибка в том, что в WM_QUERYENDSESSION делается закрытие формы, потом система посылает WM_ENDSESSION с wParam=Msg.Result от WM_QUERYENDSESSION, т.е. 1 как и надо, но Вы опять пробуете закрывать форму в процедуре от WM_ENDSESSION, тут и должен возникать AV, который возможно и приводит к тому, что перезагрузка не происходит.
И ещё я не понимаю, зачем Вы делаете Msg.LParam:=ENDSESSION_LOGOFF? В хэлпе ясно ж сказано, что нужно только вернуть единицу, больше ничего модифицировать не надо.
Вот вообщем-то всё, других ошибок пока не вижу, однако на полноту исследования не претендую.
← →
fidget (2002-04-05 17:26) [5]Пробовала использовать только одно ...
Если использую WM_QUERYENDSESSION , то результат тот же самый - программа закрывается, shutdown останавливается ...
Если использую WM_ENDSESSION, то даже программа не закрывается..
:(
← →
Donal_Graeme (2002-04-05 17:36) [6]а совет про Close и LParam благополучно пропущен? :-)
к тому же вряд ли здесь нужен inherited :-)
← →
fidget (2002-04-05 19:36) [7]> а совет про Close и LParam благополучно пропущен? :-)
а как вы думаете?
Нет не пропущен, но от этого ничего не изменилось...
> к тому же вряд ли здесь нужен inherited :-)
его отсутсвие тоже не влияет на выгрузку винды :(
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.06.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c