Windows Ereignisse in C# erkennen/abfangen
-
Hallo an alle,
ich möchte aus einem C#-Programm herraus erkennen können, ob ein Benutzer die Windows sperre aktiviert, den Computer herrunterfährt oder neustartet. Wie ich diese Events auslösen kann weiß ich bereits, nur nicht wie man diese erkennt/abfängt?
Wenn eines der Ereignisse ausgelöst wird, soll mein Programm eine Funktion aufrufen.
Viele Grüße
HighLigerBimBam
-
Dazu mußt du die WM_QUERYENDSESSION bzw. WM_ENDSESSION Message in der WndProc-Methode deines Hauptformulars abfangen.
Ein Beispiel für C# habe ich hier gefunden: http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-csharp/96330/Intercept-ShutDown-Event-in-C-Problem-with-error-code-0xC000014
-
Vielen Dank, ich denke das reicht mir schon
-
Klappt nur für Logoff, Neustart und Herunterfahren, leider noch nicht für Computersperre. Wäre also noch interessant, ob man das bewerkstelligen kann?
-
Du meinst bei "Windows+L"? Dafür ist mir keine Message bekannt, auch Spy++ zeigt keine an (die Prozesse werden dadurch ja auch nicht beendet).
-
HighLigerBiMBam schrieb:
Klappt nur für Logoff, Neustart und Herunterfahren, leider noch nicht für Computersperre. Wäre also noch interessant, ob man das bewerkstelligen kann?
Es gibt in Microsoft.Win32.SystemEvents SessionEnded und andere Events die du abfangen könntest
-
Du meinst bei "Windows+L"? Dafür ist mir keine Message bekannt, auch Spy++ zeigt keine an (die Prozesse werden dadurch ja auch nicht beendet).
Genau das meinte ich, habe mir auch schnell einen Codeschnipsel geschriben um alle Messages zu protokollieren, aber erfolglos...
Auch wenn ich die Tastenkombinationen abfange, so weiß ich dennnoch nicht, wann der Benutzer wieder die Sperre aufhebt.
Hab ich wohl oder übel pech gehabt
aber danke euch.
Edit: Ich hab jetzt einfach Maus und Keyboard Hook gemacht.
-
Rhombi... könnte Recht haben: schau dir mal das Ereignis SystemEvents.SessionSwitch an, dort kannst du dann über 'e.Reason' den genauen Grund abfragen (z.B. SessionLogoff).
Ausgetestet habe ich es aber auch noch nicht...
-
Vor dem selben Problem stand ich auch mal. Was in meinen Augen ein Problem darstellen könnte ist folgendes: Die SystemsEvents Klasse hat ein Event das heißt
EventsThreadShutdown. Diese Event beendet den Thread der auf alle Events lauscht. Es kann sein das dieses Event VOR den anderen beiden Events fliegt, somit kann man auf die gar nicht mehr reagieren, aber das ist nur eine Theorie, ausprobiert habe ich das nicht, jedoch kann ich mir das aufgrund des Verhaltens gut vorstellen.