检查第二个显示器是否以.NET连接(双显示器设置,笔记本电脑和扩展坞)

这是问题:

我有一个应用程序( C#.NET,Windows 7 ),它记住了退出时主窗体的位置。 在加载时,检索并应用设置。 运行双显示器设置的用户遇到问题。

我们大多使用带扩展坞和辅助显示器的惠普笔记本电脑。 用户有时不得不卸下他们的笔记本电脑。 当用户在辅助监视器上运行应用程序时,将其closures,解除笔记本电脑的连接并重新启动应用程序,因为应用程序会记住该位置。

我需要一种方法来查看是否连接了第二台显示器。


这是我已经尝试过的:

System.Windows.Forms.Screen.AllScreens – 即使笔记本电脑没有连接,这个arrays也有两个显示器(我认为这是因为第二个显示器仍然出现在控制面板 – >显示器中)

System.Windows.Forms.SystemInformation.MonitorCount – 同样适用于这个属性。

谢谢。


谢谢你们,但是我们笔记本电脑的问题是这样的:

我们在笔记本电脑上使用2个客户端软件来访问运行在服务器上的应用程序。 2x本身有一个设置在兼容性选项卡中禁用桌面组合。 如果将此选项closures,则第二台显示器总是显示为可用(即使笔记本电脑未连接)。

所以修复是打开这个设置。

再次感谢

试试这个……如果事情和你描述的一样糟糕(看到控制面板中的监视器和所有内容),这可能没有帮助,但是值得一试。 将以下方法添加到您的项目中:

/// <summary> /// Returns whether at least the titlebar of a form would be on a viewable portion of the screen /// </summary> /// <param name="FormLocation">The location of the form</param> /// <param name="FormSize">The size of the form</param> /// <returns></returns> protected bool FormWouldBeVisible(Point FormLocation, Size FormSize) { //The FromPoint method returns the screen OR CLOSEST SCREEN to the point you give... Screen theScreen = Screen.FromPoint(FormLocation); int titleBar = SystemInformation.CaptionHeight; //Test if enough of the title bar will be visible so that the user can move the form if desired... if ((theScreen.Bounds.Bottom >= (FormLocation.Y + titleBar)) && //If the bottom of the screen is below the title bar (theScreen.Bounds.Top <= FormLocation.Y) && //If the top of the screen is above the top of the title bar (theScreen.Bounds.Left <= (FormLocation.X + FormSize.Width - titleBar)) && //If the left of the screen is left of a little bit of the title bar (theScreen.Bounds.Right >= (FormLocation.X + titleBar))) //If the right of the screen is right of a little bit of the title bar { //The form is moveable return true; } //The point at which the form is to be loaded is not on a visible part of any screen else return false; } 

然后,当您加载表单的位置时,请传递您要加载的点和表单的大小。 如果表单足够可见,用户可以移动,则返回true;否则返回false。 如果是错误的,就把它放在主屏幕上。 我使用这个程序在坞站上使用笔记本电脑,而且具有完美的结果 – 但是如果您的电脑在不存在的情况下报告额外的显示器,我也不知道结果如何。 如果这是真的,我怀疑这是与扩展坞(或Windows …)的问题,你可能没有一个很好的解决方法通过代码。