我正在创建一个可在Linux和Windows上运行的Java应用程序。应用程序将为多监视器配置执行本机代码。因此,我想将监视器的ID从Java传递给本机代码。这让我想到了Java的ScreenDevice.getIDstring()。
Javadocs声称此方法对于调试很有用,但它也唯一地标识了一个监视器。对于Linux设备,它返回一个可用的ID字符串,允许本机代码快速检索所需的监视器对象。
但是,在Windows上,该方法仅为第一个显示返回/display0
,然后为每个后续显示向上计数(无论图形卡是否包含两个显示器,或者显示器是否位于不同的图形卡上)
说到Windows C ++代码,我尝试使用EnumDisplayDevices
并查看相应的DeviceID和DeviceStrings。这些与Java的值不匹配:
/display0
,Windows = \\.\DISPLAY1
/display1
,Windows = \\.\DISPLAY7
我真的很困惑这个/display#
ID值来自哪里......在运行本机Windows C ++代码时,我在哪里可以获得相同的/display#
值?
注意:技术上可以循环遍历所有现有显示以尝试匹配OS本机代码和Java之间的X / Y /宽度/高度,但这将是很多工作并且效率不高。我认为这是一个可能的解决方案,但它并不是很理想。