Problem beim des Programms wenn man sich abmeldet.

Goldman

Mitglied
Problem beim Schließen des Programms, wenn man sich abmeldet.

Morgen.
Ich habe foilgendes Problem:
Mein Programm fängt das schließen ab und minimiert sich.
schließen kann man es bisher nur wenn man in meinem Kontextmenü einen Button betätigt.

So funktioniert alles wunderbar, allerdings ist ein schwerer Fehler zum vorschein gekommen. Nämlich, dass das Programm nicht geschlossen wird, wenn man sich von Windows abmeldet.

Nun wollte ich fragen, ob jemand weiß, wie man entweder das Abmelden unter windows überwacht oder wie man den Close-Button der Windows Form umprogrammiert, sodass man damit nur noch minimiert.

Ich nutze folgenden Code:

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Das "Schließen" mit Bedingung abbrechen

if(CloseProgram.Equals(false))

// CloseProgram ist meine bool-variable, mit der ich überprüfe, ob der Button im Kontextmenü betätigt wurde.
{
e.Cancel = true;
// Fenster verstecken und minimieren
}
else
{}
}
 
Zuletzt bearbeitet:
Hallo.

Dein Problem beim beenden von Windows hab ich noch nicht ganz entdeckt/verstanden, kann dir dazu also auch nichts sagen.

Wegen "umprogrammierung" des Close-Buttons in der oberen Ecke, hättest auch die Suchfunktion befragen können.

Im Thread namens Tray Icon wurde dies schon erklärt, aber deiner Beschreibung nach hast du diese Funktion doch schon, oder?

Mfg,
Alex
 
Das TrayIcon hab ich aber das mit dem Close Button habe ich noch net gesucht.
WErd ich Montag auf arbeit machen.

Danke für die Antwort.
 
Das was dort im Thread steht, habe ich ja und das verhindert, dass mein Programm geschlossen wird, wenn sich mein PC abmeldet, weil es sich ja minimiert.
Und dadurch wird ein abmelden verhindert. was nicht dem Sinn meines Programms entspricht.
 
Ich habe bisher nur die VB-Variante gefunden, um den Logoff fest zu stellen.
Kann einer von euch vielleicht das in C#-conformen Code umwandeln


Private Shared WM_QUERYENDSESSION As Integer = &H11
Private Shared systemShutdown As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_QUERYENDSESSION Then
MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")
systemShutdown = True
End If
' If this is WM_QUERYENDSESSION, the closing event should be fired in the base WndProc
MyBase.WndProc(m)
End Sub 'WndProc
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
If (systemShutdown) Then
' reset the variable since they may cancel the shutdown
systemShutdown = False
If (DialogResult.Yes = _
MessageBox.Show("My application", "Would you care to save your work before logging off?", MessageBoxButtons.YesNo)) Then
e.Cancel = True
Else
e.Cancel = False
End If
End If
End Sub
 
Code:
private bool systemShutdown = false;

protected override void WndProc(ref Message m)
{
	int WM_QUERYENDSESSION = 0x11;
	if (m.Message == WM_QUERYENDSESSION)
		systemShutdown = true;
}

private void Form1_Closing(object sender, CancelEventArgs cea)
{
	if (!systemShutdown)
	{
		cea.Cancel = true;
	}
}

Wäre Simpsonst jetzt nicht gerade, hätte ich es dir auch geschrieben. *g*

Mfg,
Alex

Übrigens, ist jetzt ansich der 2te Thread dazu, oder?!
 
nach dem Implementieren habe ich folgenden Fehler, bei der Ausführung des Programms erhalten:


Eine nicht behandelte Ausnahme des Typs 'System.ComponentModel.Win32Exception' ist in system.windows.forms.dll aufgetreten.

Zusätzliche Informationen: Fehler beim Erstellen des Fensterhandles
 
Mir ist gerade aufgefallen das ich etwas wichtiges vergass in den C# Code zu übernehmen.

Code:
private bool systemShutdown = false;

protected override void WndProc(ref Message m)
{
	int WM_QUERYENDSESSION = 0x11;
	if (m.Message == WM_QUERYENDSESSION)
		systemShutdown = true;
	base.WndProc(ref m);
}

private void Form1_Closing(object sender, CancelEventArgs cea)
{
	if (!systemShutdown)
	{
		cea.Cancel = true;
	}
}

Die hervorgehobene Zeile ist noch sehr wichtig.

Mfg,
Alex
 
Zuletzt bearbeitet:
Jo das dürfte es gewesen sein.
allerdings glaub ich, das es net WndProf sondern WndProc (WindowsProcedure) is.
Ich kanns erst morgen überprüfen, weil ich nur auf Arbeit .NET 2003 hab.
 

Neue Beiträge

Zurück