Announcement

Collapse
No announcement yet.

SW_HIDE und Windows beenden!

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

  • SW_HIDE und Windows beenden!

    Hallo Leute,

    wenn ich Windows beende und mein Programm dabei noch aktiv ist beendet es sich von selbst... das ist auch korrekt! Wenn ich mein Programm jetzt mit ShowWindow auf SW_HIDE setze ist die Application verschwunden (und bei bedarf ist auch ein TrayIcon dann da ;-)), aber wenn ich dann Windows versuche zu beenden funktioniert es nicht! Es funktioniert auch nicht wenn ich mein Prozess aus dem Taskmanager (WinME) beende. Dann wird nur das Programm "sofort beendet" anstatt richtig herunter zu fahren!

    Gibt es für das SW_HIDE problem eine Lösung??

    Gruß Rabu

  • #2
    Hallo,

    das eigene Programm muss in <b>jedem</b> Fall auf den Windows-Rundruf über die Botschaft <b>WM_QUERYENDSESSION</b> reagieren (<i> Msg.Result := CONTINUE_WINDOWS_SHUTDOWN</i>), damit Windows auf dem normalen Weg herunterfahren kann. Im Fall der VCL ist das "unsichtbare", aber <b>nicht</b> versteckte Fenster von TApplication das für Win32 sichtbare Hauptfenster. Daher würde ich zuerst dort die Botschaft setzen (entweder über eine Botschaftsbehandlungsmethode (<i>procedure WMEndSession(var Msg:TWMEndSession) ;message WM_ENDSESSION;</i>) oder über die VCL-Komponente <i>TApplicationEvents</i> (OnMessage).

    &gt;..Gibt es für das SW_HIDE problem eine Lösung??

    Man könnte genau das machen, was Borland beim Fenster für TApplication auch macht: Das Fenster wird <b>nicht</b> über das Win32-APPI versteckt, sondern nur über die Höhe/Breite von 1 für das menschliche Auge "unsichtbar" gemacht. Besser ist allerdings der offzielle Weg: Eine Anwendung, die nicht ständig ein sichtbares Hauptfenster hat, gehört in die <b>TBNA</b> (Task Bar Notification Area).
    &#10

    Comment


    • #3
      Man sollte auch auf WM_ENDSESSION reagieren und da OnDestroy nicht mehr kommt es selbst aufrufen

      Comment


      • #4
        Ich verwende in einem Programm beide Methoden. Bei WM_QUERYENDSESSION beende ich meine Protokollaufzeichnung und schließe meine Schnittstellenobjekte und bei WM_ENDSESSION beende ich mein Programm.

        Nun aber zu den beiden Msg.Result: Wo ist die Konstante CONTINUE_WINDOWS_SHUTDOWN definiert und welcher Wert ist bei WM_ENDSESSION notwendig

        Comment

        Working...
        X