我们正在编写一个程序,必须能够将设置推送到特定的监视器,因此需要为每个显示设备设置唯一标识符。到目前为止,我能得到的最好结果是查询由EnumDisplayDevices返回的DEVMODE结构的句柄,并查看返回的DISPLAY_DEVICE名称是否包含“DISPLAY1”或“DISPLAY2”(我们只支持最多两个监视器的软件,并且DISPLAY_DEVICE结构的deviceName字段采用\.\DISPLAYx的形式,其中x是自然数,最小为1)。
我的问题是,如果有人从一个终端应用设置到另一个终端,并说:“从我的DISPLAY1和我的DISPLAY2获取所有设置,并将它们应用于另一个终端的DISPLAY1和DISPLAY2”,那么它会将设置应用于连接到相应端口的监视器吗?据我所知,如果只连接了一个监视器,则将分配该监视器的名称为\.\DISPLAY1,如果连接了两个,则通过DVI连接的显示设备为\.\DISPLAY1,通过VGA连接的设备为\.\DISPLAY2。
我已经尝试了逐个拔掉监视器,以不同的顺序重新连接它们,重新启动,仅连接一个再连接第二个等等,似乎总是这样分配它们。我似乎无法让它们分配到相反的名称。如果是这种情况,那么我们应该没问题了。
或者,如果有人知道一种通过MSDN调用程序确定监视器连接到哪个端口(DVI或VGA等)的方法,那将更有帮助。我已经用尽了解决这个问题的各种可能性。
基本上,我想问的是,我的假设关于Windows 7如何分配显示名称是正确的吗?如果不是,那么它是如何完成的?有没有一种改变它的方法?如果有,怎么做?有没有一种确定监视器连接到哪个端口的方法?
顺便说一下,此应用程序使用Qt编写的C++,如果有影响的话。
谢谢。
-Alex aka LeapDayWilliam
我的问题是,如果有人从一个终端应用设置到另一个终端,并说:“从我的DISPLAY1和我的DISPLAY2获取所有设置,并将它们应用于另一个终端的DISPLAY1和DISPLAY2”,那么它会将设置应用于连接到相应端口的监视器吗?据我所知,如果只连接了一个监视器,则将分配该监视器的名称为\.\DISPLAY1,如果连接了两个,则通过DVI连接的显示设备为\.\DISPLAY1,通过VGA连接的设备为\.\DISPLAY2。
我已经尝试了逐个拔掉监视器,以不同的顺序重新连接它们,重新启动,仅连接一个再连接第二个等等,似乎总是这样分配它们。我似乎无法让它们分配到相反的名称。如果是这种情况,那么我们应该没问题了。
或者,如果有人知道一种通过MSDN调用程序确定监视器连接到哪个端口(DVI或VGA等)的方法,那将更有帮助。我已经用尽了解决这个问题的各种可能性。
基本上,我想问的是,我的假设关于Windows 7如何分配显示名称是正确的吗?如果不是,那么它是如何完成的?有没有一种改变它的方法?如果有,怎么做?有没有一种确定监视器连接到哪个端口的方法?
顺便说一下,此应用程序使用Qt编写的C++,如果有影响的话。
谢谢。
-Alex aka LeapDayWilliam