Windows支持多显示器,可以另第二显示器(笔记本外接显示器)成为桌面一部分。

复制:第二显示器与第一显示器显示一直
扩展:第二显示器与第一显示器合并为1个桌面(第二显示器任务栏是否显示可调整)

仅……:关闭另一个不用的显示器
用C#开发程序时,对这种扩展桌面如何处理呢?需要注意的是,有时桌面的缩放比例也会被用户调整,这将导致第二个桌面的其实外置发生改变。

1、Screen.AllScreens.Count() //获得当前系统显示器数量
2、Screen.FromControl(this).DeviceName //当期窗体说在桌面名称
3、Screen.FromControl(this).Bounds.Width //当期窗体所在桌面宽度
4、Screen.AllScreens[1].Bounds.Width //第2桌面宽度
5、Screen.AllScreens[0].WorkingArea.Height //第1桌面可用区域高
6、Screen.AllScreens[0].Bounds.Height - Screen.AllScreens[0].WorkingArea.Height //任务栏高
7、Screen.PrimaryScreen.Bounds.Width //主显示边界宽
8、获取桌面DPI缩放比例
[DllImport("User32.dll", EntryPoint = "GetDC")]
private extern static IntPtr GetDC(IntPtr hWnd);
[DllImport("User32.dll", EntryPoint = "ReleaseDC")]
private extern static int ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("gdi32.dll")]
public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
[DllImport("User32.dll")]
public static extern int GetSystemMetrics(int hWnd);
const int DESKTOPVERTRES = 117;
const int DESKTOPHORZRES = 118;
const int SM_CXSCREEN = 0;
const int SM_CYSCREEN = 1;
private static float GetDPIScale()
{
int x = GetSystemMetrics(SM_CXSCREEN);
IntPtr hdc = GetDC(IntPtr.Zero);
int w = GetDeviceCaps(hdc, DESKTOPHORZRES);
return (float)w / x;
}
9、获取扩展桌面信息
int myLeft = (int)((float)Screen.PrimaryScreen.Bounds.Width * GetDPIScale());
int myTop = 0;
int myWdith = Screen.AllScreens[1].Bounds.Width;
int myHeight = Screen.AllScreens[1].Bounds.Height;
ExtPlay.Left = myLeft;
ExtPlay.Top = myTop;
ExtPlay.Width = myWdith;
ExtPlay.Height = myHeight;
ExtPlay.Show();
ExtPlay.TopMost = true;//窗体置顶层
this.Focus();
参考我的beigerExtPlay_A项目(2022年7月27日)