AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C# Warum klappt Abmeldung bei laufendem Programm nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum klappt Abmeldung bei laufendem Programm nicht?

Ein Thema von Chewie · begonnen am 27. Aug 2006 · letzter Beitrag vom 28. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:03
Zitat von DGL-luke:
Ist bei den Argumenten ein Hinweis azuf den Schließungsgrund drin? Der z.B. aufs Herunterfahren von Windows hinweist?
Jupp. Allerdings erst unter .Net 2.0 .
Wer also immer noch 1.1 benutzt, wird wohl um die Botschaftsmehtoden nicht herumkommen:
Code:
const int WM_QUERYENDSESSION = 0x11;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_QUERYENDSESSION)
        Application.Exit(); // sollte unter 1.1 noch kein (Form)Closing Event aufrufen
base.WndProc(ref m);
}
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:05
@Khabarakh: Genau das hab ich vermutet
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
lizardking

Registriert seit: 2. Sep 2005
76 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:09
Zitat von DGL-luke:
@Daniel G / Luckie: :shock: Naja, immerhin ist C# fürs .Net-Framework gebaut. Und das ist ein Framework, sollte einem die WinAPI-Arbeit also komplett abnehmen. Dazu gehört auch das Reagieren auf Windows-Nachrichten. Wenn sich das System beendet, sollte das Framework das eben z.B. per Event ans progamm melden - indem es das im MainFormClosing angibt.
Das sollte in der Tat so sein und wird auch so sein (sonst wuerde ja jede C#-Anwendung dieses Problem haben. Kann es sein, dass Du sonst irgendwo im Programm Messages verarbeitest und da aus Versehen die entsprechenden einfach "auffrisst" ?
Sowas hatte ich naemlich auch schonmal ;-) Immer fleissig Window-Messages abgefangen und nachgeschaut, ob es die erwartete ist und wenn nicht einfach weggeworfen anstatt weiterzuleiten.

Ist nur 'ne Idee...

Gruesse,

Lizzy
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:20
Bisher hab ich noch keine Messages aufgefangen, ich werd den Vorschlag von Khabarakh verwenden. Er klingt so wissend, also wirds stimmen

Jetzt passiert was lustiges: Das Programm wird zwar beendet, der Abmeldevorgang aber unterbrochen. Wenn ich dann ein zweites mal den Befehl zum Abmelden geb, wird er durchgeführt
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#15

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:25
Zitat von Chewie:
Jetzt passiert was lustiges: Das Programm wird zwar beendet, der Abmeldevorgang aber unterbrochen. Wenn ich dann ein zweites mal den Befehl zum Abmelden geb, wird er durchgeführt
Zitat:
Return Values
If an application can terminate conveniently, it should return TRUE; otherwise, it should return FALSE.
Was gibt's du denn zurück?

Ansonsten Versuch doch mal meinen Vorschlag und nimm' WM_ENDSESSION
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:28
Zitat von lizardking:
sonst wuerde ja jede C#-Anwendung dieses Problem haben.
Ne..... weil nicht jede e.Cancel = false; enthält...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#17

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:36
Zitat von Chewie:
Jetzt passiert was lustiges: Das Programm wird zwar beendet, der Abmeldevorgang aber unterbrochen. Wenn ich dann ein zweites mal den Befehl zum Abmelden geb, wird er durchgeführt
Nett . Aber mir fällt gerade auf, dass man das Programm sowieso lieber nicht in QUERYSESSION schließen sollte. Setze also stattdessen lieber ein "Shutting Down"-Flag, in Closing kannst du dann
Code:
e.Cancel = !shuttingDown;
benutzen. Sollte nun wirklich funktionieren, da es so sogar im MSDN zu finden ist .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 27. Aug 2006, 22:47
Ja, das ist ne gute Idee. Probier ich morgen mal, für heute ist mein VS zu müde

Danke für die Antworten. Und probiert das Programm mal aus und gebt Feedback
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Warum klappt Abmeldung bei laufendem Programm nicht?

  Alt 28. Aug 2006, 13:03
So, ich habs jetzt so gemacht, wie Khabarakh vorgeschlagen hat, mit dem Shutdown-Flag. Zu Sicherheit wird auch noch eine 1 zurückgegeben in der Fensterprozedur (auch wenn das durch den Basisaufruf ohnehin passieren sollte, aber sicher ist sicher).

Code:
const int WM_QUERYENDSESSION = 0x11;

      protected override void WndProc(ref Message m)
      {
         if (m.Msg == WM_QUERYENDSESSION) {
            m.Result = new IntPtr(1); // signal windows to proceed
            endSession = true; // set flag that closing of form shouldn't be declined
         }
         base.WndProc(ref m);
      }
So funktioniert das ganz gut

Danke an alle!
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz