ERLEDIGT
JA
JA
ANTWORTEN
27
27
ZUGRIFFE
3011
3011
EMPFEHLEN
-
Sag mal Reverent, ließt Du eigentlich was ich Dir schreibe?

Ich geb mir hier absolute mühe und Du arbeitest hier einfach schlapig mit.
- kannst Du mich cosmo nennen
- solltest Du mal bitte genauer nachlesen und nicht oberflächlich.
Ich hab Dir eine eigentlich "absolut narrensichere" Step-By-Step Anleitung gepostet. - Postest Du jetzt deinen Code und ich korrigier ihn damit Du endlich begreifst was Du falsch machst.
Und zwar so wie es Dir in diesem Post beschrieben hab.
Ich hab auch anfangs Denkblockaden gehabt. Aber durch fertigen code lernt man nicht
Nur aus seinen eigenen Fehlern.
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo cosmo,
Ok noch mal von vorne ob ich das richtig kapiert habe, also wenn der User den PC runterfährt, dann wird diese funktion aufgerufen?
Aber ich glaube das stimmt nicht, also noch mal.
Hier wird die WndProc-Methode überschrieben.
Was sit jetzt das LogoffSignal und wo kommt dieses hin 'globalen MessageLoop'.Code :1 2 3 4 5 6 7 8 9 10
protected override void WndProc(ref Message m) { if(m.Msg == WM_QUERAENDSESSION) { test(); // Funktionsaufruf v_bExitCalled = true; } base.WndProc(ref m); } }
Ich nehme an erst mal global (auf der kompletten From zugreifbar).
Und was ist dann dei MessageLoop?
Heißt das jetzt die WndProc Methode durch eine Schleife z.B. foreach nach einem bestimmten Wert abfragen?Die WndProc-Methode stellt den MessageLoop dar,
Bis dann
-
Die WndProc-Methode stellt den MessageLoop vom Windows dar
und wird immer wiederkehrend aufgerufen. NON-STOP!
Desshalb dürfen auch keine krittischen Abläufe und Messageboxes hinein.
Das ist die Achillesferse vom WXP.
Stell Dir vor du wohnst in einem Hochhaus. Dann währe das die interne Sprechanlage.
Hier drinnen kannst Du eigentlich alle SystemEreignisse in Form von Codes tracken.
Wie zum Beispiel: CD-Laufwerk öffnet und schließt sich und Div. System Ereignisse wie zB das beenden der Session.
Du prüfst also auf ein besimmtes Ereignis, setzt ein Flag in deinem Proggi,
und schon kannst Du darauf reagieren.
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Das heißt ich muss die Flag immer überprüfen ob die z.b von false auf true gesetzt wurde?
So wie das meinst du?Code :1 2
if(!v_bExitCalled) e.Cancel = true;
Du sagst das ist bei Windows XP so aber was ist mit anderen Systemen Z.B W98 oder W2000 u.s.w von Linux über Mono mal ganz abgesehn!!
-
Ja genau.
Reverent,
e.Cancel = true; bedeutet in der Form.Closing Methode dass das Beenden des Programm abgebrochen wird. (Es bleibt an)
Dieses Snippet hat aber mit unserem Vorhaben nicht zu tun.
Wir wollen nicht das Beenden abbrechen solange die Session nicht beendet wurde,
sondern wir wollen darauf regieren wenn die Session beendet wird.
Hier mal ein Beispiel wo beides miteinander Verbunden ist. (TrayIcon zum Form hinzu fügen):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if( v_bExitCalled ) // Speichern der Daten wenn die Session beendet wird SaveMySettings(); else{ // Form ausblenden und nur im SysTray anzeigen this.WindowState = FormWindowState.Minimized; e.Cancel = true; // [B]Abbrechen des Beendens des Forms[/B] } } // Ereignisbehandlung wenn das Form minimiert oder maximiert wird private void Form1_LocationChanged( object sender, EventArgs e ) { if ( this.WindowState == FormWindowState.Minimized ) this.ShowInTaskbar = false; else if ( this.WindowState == FormWindowState.Normal ) this.ShowInTaskbar = true; }Ich hätte das verallgemeinern sollen.Du sagst das ist bei Windows XP so aber was ist mit anderen Systemen Z.B W98 oder W2000
Es betrifft alle Windows Systeme. AFAIKMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo cosmo,
ich glaube den ersten Fehler habe ich gefunden und zwar
private void Form1_Closing(...) dieser Event wird garnicht ausgeführt, weil der User am PC das From ja garnicht schliesst ich muß einen anderen Event finden der ausgelöst wird, wenn das Programm beendet wird.
Und das Programm wird nur beendet dadurch das der User sich abmeldet, neustartet oder den PC runterfährt.
So eine s...... .
Also irgend welche vorschläge?
Frage: Kann ich mein Programm nicht in einem Thread einpacken und darauf reagieren, wenn der beendet wird?
Bis dann
-
Hast Du es denn überhaupt mit der Methode verbunden? (Hab ich erklärt)private void Form1_Closing(...) dieser Event wird garnicht ausgeführt
Die Closing Methode ist die EINZIGE Möglichkeit das schließen des Forms abzufangen.weil der User am PC das From ja garnicht schliesst ich muß einen anderen Event finden der ausgelöst wird, wenn das Programm beendet wird.
Sie wird immer aufgerufen, egal wer oder was das Programm beendet.
Genau das hab ich anfangs auch immer gesagt.So eine s...... .
Schweinskram.Frage: Kann ich mein Programm nicht in einem Thread einpacken und darauf reagieren, wenn der beendet wird?MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Natürlich habe ich eine private void Form1_Closing(...);
Dies stand ja schon da:
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
und dies habe ich darunter geschrieben:
this.Closing += new CancelEventHandler(this.Form1_Closing);
Meinst du da wo 'this.Form1_Closing' steht.
Aber was für eine Metohde?
Bis dann
-
Form1_Closing ist die Methode die bei dem Event Closing ausgeführt wird.
Die zwei Zeilen machen genau das gleiche. Der einzige unterschied besteht darin,this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
und dies habe ich darunter geschrieben:
this.Closing += new CancelEventHandler(this.Form1_Closing);
dass oben über den Namespace auf die Klasse CancelEventHandler zugegriffen wird,
und unten direkt. ( Namespace wurde mit using eingebunden.)
Du brauchst das also blos einmal da stehen haben.
Ich frage mich jetzt echt wie es sein kann, dass der Code in dem Closing Event,
deiner Meinung nach, nicht ausgeführt wird.
Setz mal bitte einen Haltepunkt und debugge das Programm.
Wenn Du es beendest, MUSS die IDE in den Codeabschnitt springen.
MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo cosmo,
und was ist da jetzt noch der Unterschied, irgend was muß da ja noch ander sein.Die zwei Zeilen machen genau das gleiche. Der einzige unterschied besteht darin,
dass oben über den Namespace auf die Klasse CancelEventHandler zugegriffen wird,
und unten direkt. ( Namespace wurde mit using eingebunden.)
Bis dann
-
Einmal hat er den Namespace mit using eingebunden und einmal nicht.
Lesen!
-
22.07.05 15:41 #27
- Registriert seit
- Jan 2004
- Ort
- Paderborn
- Beiträge
- 1.210
Da gibt es keinen anderen Unterschied. Man spart sich einfach nur Schreibarbeit.
-
Einen besten Danke an alle die mir hier geholfen haben und besonders an cosmo.
Soweit Funktioniert es alles so wie ich will nur jetzt geht es noch an die Feinarbeit, ich muss da halt noch ein paar Variabeln etwas umbennen u.s.w. und vielleicht noch etwas mehr OOP rein zaubern.
Also bis dann.
P.S. Wenn ich fertig bin stelle ich mein Programm hier Zuverfügung, wer Lust hat kann dann ja ein wenig rein schnuppern und ich bin für Konstruktive Kritik immer offen.
Ähnliche Themen
-
ES will nicht runterfahren
Von metalgear im Forum Microsoft WindowsAntworten: 1Letzter Beitrag: 28.06.04, 13:50 -
ein programm zum runterfahren uvm.
Von microchip im Forum C/C++Antworten: 4Letzter Beitrag: 04.05.04, 23:53 -
WinXP runterfahren
Von Foehre im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 23.11.03, 16:38 -
PC mit Timer Runterfahren****?
Von RealDragon im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 15.08.03, 09:35 -
win2000 - runterfahren !
Von adam im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 02.01.03, 15:35





Zitieren
Login





