C# 如何获取实际监视器ID以更改显示设置

C# 如何获取实际监视器ID以更改显示设置,c#,.net,windows,operating-system,system,C#,.net,Windows,Operating System,System,我在尝试获取正确/真实的监视器ID时遇到问题。联机的一切都是关于从屏幕对象获取devicename或通过显示设备获取监视器信息。我有可以使监视器成为主监视器或非主监视器的代码,问题是获取正确和真实的监视器ID。显然,windows更改了监视器ID,这意味着您的“Display1”可能是0,1,2等。在测试时,我发现: 本地开发人员笔记本电脑: “Display1”的ID为0 “Display4”(外部监视器)的ID为3。我不明白,如果我只有笔记本电脑和外置显示器,为什么会是“显示器4”。我想应该

我在尝试获取正确/真实的监视器ID时遇到问题。联机的一切都是关于从屏幕对象获取devicename或通过显示设备获取监视器信息。我有可以使监视器成为主监视器或非主监视器的代码,问题是获取正确和真实的监视器ID。显然,windows更改了监视器ID,这意味着您的“Display1”可能是0,1,2等。在测试时,我发现:

本地开发人员笔记本电脑: “Display1”的ID为0 “Display4”(外部监视器)的ID为3。我不明白,如果我只有笔记本电脑和外置显示器,为什么会是“显示器4”。我想应该是“展示2”

在一个有VGA和HDMI连接的CPU上(我测试了其中3个) “Display1”是1的Ian D

在另一个CPU上,“Display1”不再是1的ID,而是一个完全不同的ID

当我进入显示设置并单击“检测”时,它显示1和2

我想可能抓取devicename并将其子串出来以获得数字,然后执行-1以获得真实ID,但这只适用于我的开发人员笔记本电脑


是否有可能获得正确/真实的监视器ID

From—“没有一种受支持的方法可以通过编程方式计算出您引用的ID。为应用程序提供一种方法,使其使用屏幕分辨率控制面板使用的相同ID标记监视器,这从来都不是设计目标。您的应用程序试图实现什么?”-您说您需要监视器ID来更改设置-您使用什么API来执行此操作?一个应用程序需要加载到特定的监视器上,并且该监视器需要是主监视器。如果应用程序加载时出现屏幕翻转(应用程序a位于监视器B上,应用程序B位于监视器a上),且设置主屏幕的功能(如果使用正确的监视器id),则此检查将有助于将应用程序a设置为监视器a,并将该主屏幕设置为更正问题,而无需注销和手动执行此操作。我使用的Windows API使用:NativeMethods.EnumDisplayDevices();NativeMethods.EnumDisplaySettings();从EnumDisplayDevices返回的状态标志
DISPLAY\u DEVICE\u PRIMARY\u DEVICE
是否告诉您了这一点?实际上,您刚才所说的话激发了一个想法,并将给它一个机会。我会告诉你怎么做的goes@stuartd谢谢你,我需要检查什么是附加的,而不是主要的,并获取该ID,到目前为止是监视器的真实ID。能够前后切换屏幕,现在我只需要检查屏幕,确保仅在屏幕从-“没有一种受支持的方法可以通过编程方式找出您引用的ID。为应用程序提供一种方法,用屏幕分辨率控制面板使用的相同ID标记监视器,这从来不是设计目标。您的应用程序试图实现什么目标?“-您说您需要监视器ID来更改设置-您使用什么API来执行此操作?一个应用程序需要加载到特定的监视器上,并且该监视器需要是主监视器。如果应用程序加载时出现屏幕翻转(应用程序a位于监视器B上,应用程序B位于监视器a上),且设置主屏幕的功能(如果使用正确的监视器id),则此检查将有助于将应用程序a设置为监视器a,并将该主屏幕设置为更正问题,而无需注销和手动执行此操作。我使用的Windows API使用:NativeMethods.EnumDisplayDevices();NativeMethods.EnumDisplaySettings();从EnumDisplayDevices返回的状态标志
DISPLAY\u DEVICE\u PRIMARY\u DEVICE
是否告诉您了这一点?实际上,您刚才所说的话激发了一个想法,并将给它一个机会。我会告诉你怎么做的goes@stuartd谢谢你,我需要检查什么是附加的,而不是主要的,并获取该ID,到目前为止是监视器的真实ID。我已经能够前后切换屏幕,现在我只需要检查屏幕,确保只在屏幕翻转时执行该代码