Fragensteller
Überprüfen ob Programm im Vollbildmodus läuft und Funktion ausführen beim Beenden des Programmes.

Frage
-
Hallo!
1. Ich suche eine Möglichkeit um in meinem C#-Programm abzufragen, ob eine bestimmte Fremdanwendung (in dem Fall freelancer.exe) im Vollbildmodus läuft (und nicht gerade minimiert ist).
2. Gibt es eine Möglichkeit eine Funktion in meinem Programm auszuführen, wenn diese Anwendung geschlossen oder minimiert wird?
Zur Zeit rufe ich dies mit einem Timer alle 250 ms ab:private void tFLSeeker_Tick(object sender, EventArgs e) { Process[] fLRunning = Process.GetProcessesByName("freelancer"); if (fLRunning.Length > 0 && fLRunning[0].MainModule.FileVersionInfo.ProductName == "Freelancer") { //Programm läuft! } else { // Programm läuft nicht. } }
Danke!
Alle Antworten
-
2. Gibt es eine Möglichkeit eine Funktion in meinem Programm auszuführen, wenn diese Anwendung geschlossen oder minimiert wird?
Hallo R,
beim schliessen (genauer: beenden des Prozesses) gäbe es in definierten Fällen:
Process.Exited-Ereignis
http://msdn.microsoft.com/de-de/library/system.diagnostics.process.exited.aspx
unter Einfluss von
http://msdn.microsoft.com/de-de/library/system.diagnostics.process.enableraisingevents.aspxoder ggf (blocking) Process.WaitForExit
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforexit.aspx
Um von anderen Prozessen 'Vollbildmodus oder Minimiert' zu erkennen dürften Windows-APIs (oder darauf aufbauende Klassen) nötig werden, wobei dies bei Games (DirectX usw) oft markant schwieriger wird.
Hier (ungeprüft) Hinweise
http://stackoverflow.com/questions/1219454/detecting-full-screen-direct3d-applications
"SHQueryUserNotificationState"
"IDirect3DDevice9::GetDisplayMode"http://stackoverflow.com/questions/3536373/detect-if-user-has-any-application-running-in-fullscreen
"IDirect3DDevice9::TestCooperativeLevel"
-
Hallo,
ich denke dein Vorhaben lässt sich mir der Win32 Funktion GetWindowPlacement ganz gut bewerkstelligen:
Ein Beispiel dazu findest du bei Pinvoke
http://www.pinvoke.net/default.aspx/user32.getwindowplacementGetWindowPlacement auf MSDN
http://msdn.microsoft.com/en-us/library/ms633518(VS.85).aspx
MfG, Sebastian Gross -
Hallo Reiser,
Mit folgender API kannst Du herausbekommen, ob das Window minimiert ist:
[pinvoke.net: isiconic (user32)]
http://www.pinvoke.net/default.aspx/user32.isiconic[IsIconic Function (Windows)]
http://msdn.microsoft.com/en-us/library/ms633527(VS.85).aspx[Erkennen einer bereits aktiven Programm-Instanz]
http://msdn.microsoft.com/de-de/library/bb979551.aspx
________________Zum Prozess Beendigung ... :
Das Process.Exited-Ereignis (oder WaitForExit) hilft nicht immer, bzw. es funktioniert, aber hilft Dir in Fällen, wo der Prozess wieder andere Prozesse erstellt und selber sofort beendet nicht. Hier muß man ggf. die Anwendung benutzerdefiniert mit aktivem Warten und Abfragen des neuen Prozesses anpassen. Ich denke aber, wenn Du das MainWindowHandle bei Deinem fLRunning[0] hast, sollte auch Exited funktionieren.
ciao Frank