Announcement

Collapse
No announcement yet.

Herunterfahren von Win98/NT erkennen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Herunterfahren von Win98/NT erkennen

    Hallo,

    wie kann ich unter Win 98/NT erkennen, wenn der Rechner heruntergefaheren wird? Ich müsste kurz bevor der Rechner heruntergefahren wird noch eine Nachricht über das Netzwerk via die NMMSG Komponente senden. Es funktioniert aber weder mit der OnClose-Rutine noch mit dem finalization Abschnitt der Unit. Vielleicht liegt es daran, dass sowahl das Fenster als auch die APPLICATION nicht sichtbar ist. Vielleicht geht es übere eine Windows-Botschaft, aber das hat bei mir irgendwie nicht funktioniert.

    Danke,
    Patrick

  • #2
    Hallo Patrick,

    das funktioniert gut mit OnCloseQuery. Ich habe mal ein Programm geschreiben, das im Hintergrund lief und beim Herunterfahren eine Datensicherung angestossen hat.

    Hier ist ein kurzes Beispiel:

    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>
    begin<br>
    CanClose:=False;<br>
    //Noch schnell was zu erledigen...<br>
    CanClose:=True;<br>
    end;<br>

    Gruß,

    Christia

    Comment


    • #3
      Hallo Patrick!!

      Die Lösung von funktioniert grundsätzlich, aber eleganter funktioniert es über das Ereigenis (Windows Message):

      procedure WMEndSession(var msg:TWMEndSession); message WM_QueryENDSESSION;

      Dann kannst du z.B. im Ereignis CloseQuery CanClose auf False setzen, damit der User dein Programm nicht schließen kann, und das ereignis WMEndSession wird beim Beenden von Windows trotzdem aufrufen.

      So ungefähr sollte bei dir die Procedure dann aussehen
      procedure tfrmmain.WMEndSession;
      begin
      //noch schnell was erledigen
      msg.result:=1;
      end;

      mfg HAH

      Comment


      • #4
        Hallo Patrick!!

        Die Lösung von Christian funktioniert grundsätzlich, aber eleganter funktioniert es über das Ereigenis (Windows Message):

        procedure WMEndSession(var msg:TWMEndSession); message WM_QueryENDSESSION;

        Dann kannst du z.B. im Ereignis CloseQuery CanClose auf False setzen, damit der User dein Programm nicht schließen kann, und das ereignis WMEndSession wird beim Beenden von Windows trotzdem aufgerufen.

        So ungefähr sollte bei dir die Procedure dann aussehen
        procedure tfrmmain.WMEndSession;
        begin
        //noch schnell was erledigen
        msg.result:=1;
        end;

        mfg HAH

        Comment

        Working...
        X