2010-03-08 21 views

risposta

58

Ti serve solo l'area che userebbe un'applicazione standard, ad esclusione della barra delle applicazioni di Windows e delle finestre ancorate? In tal caso, utilizzare Screen.WorkingArea property. Altrimenti, utilizzare Screen.Bounds.

Se ci sono più monitor, è necessario per afferrare lo schermo dalla forma, vale a dire

Form myForm; 
Screen myScreen = Screen.FromControl(myForm); 
Rectangle area = myScreen.WorkingArea; 

Se volete sapere quale è il display primario, utilizzare la proprietà Screen.Primary. Inoltre, è possibile ottenere un elenco di schermate dalla proprietà Screen.AllScreens.

+2

+1 per Screen.WorkingArea. Ho erroneamente utilizzato Screen.Bounds. Ti darei +2 se potessi, per menzionare Screen.FromControl invece di Screen.PrimaryScreen! – ToolmakerSteve

-1
Screen.PrimaryScreen.WorkingArea.Size() 
5

La risposta data è corretta, per quanto possibile. Tuttavia, quando si imposta la dimensione del testo su un valore superiore al 125%, Windows (e .NET) iniziano a ingrandire le dimensioni dello schermo per eseguire automaticamente il ridimensionamento automatico.

La maggior parte delle volte non si tratta di un problema: in genere si desidera eseguire Windows e .NET. Tuttavia, nel caso in cui tu abbia davvero bisogno di conoscere il conteggio effettivo dei pixel sullo schermo (ad esempio, vuoi dipingere direttamente sul desktop DC), puoi fare quanto segue. Ho provato solo su Win10. YMMV su altre versioni di Windows.

Finora, questo è l'unico modo che ho trovato per ottenere il conteggio dei pixel dello schermo vero se non si desidera disattivare globalmente la consapevolezza DPI nell'app. Si noti che questo esempio ottiene la dimensione di visualizzazione primaria: sarà necessario modificarlo per ottenere altre schermate.

[DllImport("User32.dll")] 
static extern IntPtr GetDC(IntPtr hwnd); 

[DllImport("User32.dll")] 
static extern int ReleaseDC(IntPtr hwnd, IntPtr dc); 

[DllImport("gdi32.dll")] 
static extern int GetDeviceCaps(IntPtr hdc, int nIndex); 

IntPtr primary = GetDC(IntPtr.Zero); 
int DESKTOPVERTRES = 117; 
int DESKTOPHORZRES = 118; 
int actualPixelsX = GetDeviceCaps(primary, DESKTOPHORZRES); 
int actualPixelsY = GetDeviceCaps(primary, DESKTOPVERTRES); 
ReleaseDC(IntPtr.Zero, primary); 
Problemi correlati