2010-03-08 20 views

Respuesta

58

¿Necesita solo el área que usaría una aplicación estándar, es decir, excluyendo la barra de tareas de Windows y las ventanas acopladas? Si es así, use el Screen.WorkingArea property. De lo contrario, use Screen.Bounds.

Si hay varios monitores, tiene que agarrar la pantalla de su forma, es decir

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

Si quieres saber cual es la pantalla principal, utilice la propiedad Screen.Primary. Además, puede obtener una lista de pantallas de la propiedad Screen.AllScreens.

+2

+1 para Screen.WorkingArea. Por error, he estado usando Screen.Bounds. Te daría +2 si pudiera, por mencionar Screen.FromControl en lugar de Screen.PrimaryScreen. – ToolmakerSteve

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

La respuesta correcta es correcta, hasta donde llega. Sin embargo, cuando ha configurado su tamaño de texto en algo más de 125%, Windows (y .NET) comienzan a parpadear aproximadamente del tamaño de la pantalla para poder escalar automáticamente.

La mayoría de las veces, esto no es un problema, generalmente quiere Windows y .NET para hacer esto. Sin embargo, en el caso en que realmente necesite conocer el recuento real de píxeles en la pantalla (por ejemplo, desea pintar directamente en el escritorio DC), puede hacer lo siguiente. Solo he probado esto en Win10. YMMV en otras versiones de Windows.

Hasta ahora, esta es la única manera que he encontrado para obtener un verdadero conteo de píxeles de pantalla si no quiere desactivar globalmente el reconocimiento de DPI en su aplicación. Tenga en cuenta que este ejemplo obtiene el tamaño de visualización principal; deberá modificarlo para obtener otras pantallas.

[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); 
Cuestiones relacionadas