2013-08-19 12 views
7

Ich möchte ein zufälliges Fenster auf der linken Seite meines Bildschirms maximieren. Kann ich Windows Aero-Funktionen aus meinem Code verwenden? Dieses Fenster kann mit der Maus maximiert werden. Ich möchte das nur programmatisch machen.Programmgesteuertes Maximieren des Fensters auf der Hälfte des Bildschirms

Ich benutze C# und ich kann die IntPtr des Fensters bekommen.

Wenn möglich ohne falsche Maus oder Tastatureingabe.

+0

Leider nicht, Microsoft in ihrer Weisheit hat keine öffentliche API für die Aero-Snap-Funktionalität zur Verfügung gestellt. –

+1

Dies kann ohne p/invoke geschehen, nur nicht mit Leichtigkeit, –

+0

Können Sie dieses Verhalten nicht durch die Einstellung der Fensterposition und -größe, basierend auf der Desktop-Größe? Sollte einfach genug sein, nur nicht sehr "sauber" – Kippie

Antwort

3

Es ist nicht genau das gleiche, aber täuscht es gut:

ShowWindow(handle, SW_MAXIMIZE); 
// for a split second you might see a maximized window here 
MoveWindow(handle, 0, 0, Screen.PrimaryScreen.WorkingArea.Width/2, Screen.PrimaryScreen.WorkingArea.Height, true); 
5

Dies kann ohne p/invoke erfolgen.

Try this:

Rectangle rect = Screen.PrimaryScreen.WorkingArea; 
rect.Width = rect.Width/2; 
Bounds = rect; 

Dies wird das aktuelle Fenster auf der linken Seite des primären Bildschirm setzen.

Dann fügen Sie dies einfach hinzu, um es auf der rechten Seite des Bildschirms zu setzen.

Location = new Point(rect.Width, 0); 
+0

Ich habe nicht akzeptiert, weil der Fensterstatus nicht maximiert ist. Ich habe es ohne WinApi versucht (FormWindowState etc.), aber es funktioniert aus irgendeinem Grund nicht. – Bitterblue

0

schweres Heben für Echtzeit-Praktika erfordern, vor allem für Nicht-Kind-Prozesse. Beispiel - www.ishadow.com/vdm. Für das manuelle "Reparieren" der maximierten Fensterposition arbeitet MoveWindow (hWnd, startPos, 0, winWidth, winHeight, true) nach ShowWindow (hWnd, SW_MAXIMIZE) normalerweise (try Task Manager unter Windows 10) wie oben gezeigt.

Verwandte Themen