In einer Anwendung aus der ich auf Access via COM zugreife, wollte ich das Access-Fenster ausblenden. Die "visible" Eigenschaft kann man auch setzten - es passiert nur nix, daher das ganze über DLLImport. Wichtig ist, dass man sich den/die "handle" auf das/die Fenster merkt - die findet man sonst nicht mehr und kann sie sonst auch nicht mehr sichbar schalten.
Das Beispiel kann man natürlich auch auf jede andere Anwendung übertragen und das Process-Objekt hat ja auch noch paar andere Methoden, um ein bestimmtes Fenster zu finden, "GetProcessByID()" usw. sind auch vorhanden.
z.B. ausblenden von allen Access-Fenstern:
ArrayList processHandles = new ArrayList();
foreach (Process p in Process.GetProcessesByName("msaccess"))
{
ShowWindow((int)p.MainWindowHandle, 0); // 0 steht für unsichtbar
processHandles.Add((int)p.MainWindowHandle);
}
einblenden
foreach (int processHandle in processHandles)
{
ShowWindow(processHandle, 9); // 9 bedeutet restore - sprich so, wie das Fenster vor dem ausblenden aussah (Position, Größe)
}
und der dllimport, damit die Funktion genutzet werden kann:
[DllImport("User32")]
private static extern int ShowWindow (int hwnd, int nCmdShow);