Erhalten Fenster-Status von einem anderen Prozess
Wie bekomme ich die Fenster-Status(maximized
, minimized
) von einem anderen Prozess ausgeführt wird?
Ich hatte versucht, die durch die Nutzung dieser:
Process[] procs = Process.GetProcesses();
foreach (Process proc in procs)
{
if (proc.ProcessName == "notepad")
{
MessageBox.Show(proc.StartInfo.WindowStyle.ToString());
}
}
Aber wenn der Prozess ist Maximized
oder Minimized
es immer wieder Normal
.
Wie man dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Win32 verwenden, die durch P/Invoke für die überprüfung der Zustand der anderen Fenster. Hier finden Sie einige Beispiel-code:
Definition mit freundlicher Genehmigung von pinvoke.net.
showCmd
ist immer der ursprüngliche Wert, und bleibt unverändert, auch wennShowWindow(showCmd != 1)
genannt wird,GetWindowPlacement
noch zurückshowCmd = 1
imWINDOWPLACEMENT
Struktur. So ist es buchstäblich an den moment, als das Fenster 'platziert'?System.Drawing
Bist du mit proc.StartInfo, was falsch ist. Es ist nicht unbedingt die runtime-Fensters Stil des Ziel-Prozess. Es ist nur Start-info können Sie einstellen, und kann dann weitergegeben werden, um den Prozess, wenn es startet.
Die C# - Signatur:
Müssen Sie die Verwendung von p/invoke und rufen GetWindowLong(hWnd, GWL_STYLE), und pass proc.MainWindowHandle als der hWnd-parameter.
Können Sie überprüfen, ob das Fenster minimiert/maximiert, indem Sie etwas wie:
HINWEIS: die Werte für Die flags (WS_MINIMIZE, etc), kann sein gefunden auf dieser Seite: http://www.pinvoke.net/default.aspx/user32.getwindowlong
Danke an Kakashi für den Hinweis über unsere Fehler in der Prüfung das Ergebnis.
WS_MAXIMIZE
geschnittene Wert vonstyle
selbst, indem&
Sie tun sollten(style & WS_MAXIMIZE) == WS_MAXIMIZE
.()
oder erhalten SieOperator '&' cannot be applied to operands of type 'int' and 'bool'
int
keinC# enum
geben. Nur der Wert. Das ist349110272
. Aber wie definiert sich der normale Zustand, in WS_* windows styles?Zwei-Fenster-Staaten (maximiert /minimiert) werden können, bekommen durch Aufruf von WinAPI IsIconic() /IsZoomed() wie folgt:
Definition von enum ShowWindowCommands und andere Funktionen wurden aus http://www.PInvoke.net
In Windows PowerShell können Sie dies tun, indem Sie folgenden code: