2013-08-19 18 views
7

Voglio massimizzare una finestra casuale sul lato sinistro dello schermo. Posso usare le funzioni di Windows Aero dal mio codice? Questa finestra può essere ingrandita come quella con il mouse. Voglio solo farlo a livello di programmazione.Ingrandisci a livello di codice finestra su metà dello schermo

Io uso C# e posso ottenere il IntPtr della finestra.

Se possibile senza falsi input del mouse o della tastiera.

+0

Sfortunatamente no, Microsoft nella loro saggezza non ha fornito alcuna API pubblica per la funzionalità di snap aereo. –

+1

Questo può essere fatto senza p/invocare, Semplicemente non con facilità, –

+0

Non riesci a imitare questo comportamento impostando la posizione e le dimensioni della finestra, in base alle dimensioni del desktop? Dovrebbe essere abbastanza facile, semplicemente non molto "pulito" – Kippie

risposta

3

Non è esattamente la stessa, ma finge bene:

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

Questo può essere fatto senza p/invoke.

Prova questo:

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

questo metterà la finestra corrente sulla sinistra dello schermo primario.

Quindi aggiungere questo per metterlo sulla destra dello schermo.

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

Non ho accettato perché lo stato della finestra non è massimizzato. Ho provato senza WinApi (impostazione FormWindowState ecc.) Ma non funziona per qualche motivo. – Bitterblue

0

Richiederà sollevamento di carichi pesanti per i tirocini in tempo reale, in particolare per i processi non-figlio. Esempio: www.ishadow.com/vdm. Per il "fissaggio" manuale delle finestre ingrandite, spostare MoveWindow (hWnd, startPos, 0, winWidth, winHeight, true) dopo ShowWindow (hWnd, SW_MAXIMIZE) di solito (prova Task Manager su Windows 10) funziona come indicato sopra.