6

在为游戏加载用户友好设置时,我遇到了一个问题。

我正在尝试做的事情:
我正在尝试以可区分的方式加载所有监视器的名称。


我试过的:


wmic:

C:\Users\Matt>wmic
wmic:root\cli>DESKTOPMONITOR
Availability  Bandwidth  Caption              ConfigManagerErrorCode  ConfigManagerUserConfig  CreationClassName     Description          DeviceID         DisplayType  ErrorCleared  ErrorDescription  InstallDate  IsLocked  LastErrorCode  MonitorManufacturer       MonitorType          Name                 PixelsPerXLogicalInch  PixelsPerYLogicalInch  PNPDeviceID                              PowerManagementCapabilities  PowerManagementSupported  ScreenHeight  ScreenWidth  Status  StatusInfo  SystemCreationClassName  SystemName
8                        Generic PnP Monitor  0                       FALSE                    Win32_DesktopMonitor  Generic PnP Monitor  DesktopMonitor1                                                                                     (Standard monitor types)  Generic PnP Monitor  Generic PnP Monitor  96                     96                     DISPLAY\LGD02DA\4&265EFD6&0&UID67568640                                                                                    OK                  Win32_ComputerSystem     ALIENWARE
3                        Generic PnP Monitor  0                       FALSE                    Win32_DesktopMonitor  Generic PnP Monitor  DesktopMonitor2                                                                                     (Standard monitor types)  Generic PnP Monitor  Generic PnP Monitor  96                     96                     DISPLAY\SAM08D6\5&14F3DA9&0&UID1078064                                                          1080          1920         OK                  Win32_ComputerSystem     ALIENWARE

wmic:root\cli>DESKTOP
BorderWidth  Caption  CoolSwitch  CursorBlinkRate  Description  DragFullWindows  GridGranularity  IconSpacing  IconTitleFaceName  IconTitleSize  IconTitleWrap  Name                 Pattern  ScreenSaverActive  ScreenSaverExecutable  ScreenSaverSecure  ScreenSaverTimeout  SettingID  Wallpaper                                         WallpaperStretched  WallpaperTiled
1                                 500                           TRUE                                           Segoe UI           9              TRUE           NT AUTHORITY\SYSTEM  (None)   FALSE                                                                                                                                         FALSE
1                                 530                           TRUE                              43           Segoe UI           9              TRUE           Alienware\Matt       0        FALSE                                                        0                              C:\Users\Matt\Pictures\Wall Papers\daftpunk3.png  TRUE                FALSE
1                                 500                           TRUE                                           Segoe UI           9              TRUE           .DEFAULT             (None)   FALSE                                                                                                                                         FALSE


图形环境(Java 代码):

 final GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    for (GraphicsDevice device : environment.getScreenDevices()) {
        System.out.println(device);
        System.out.println("\t" + device.getIDstring());
        System.out.println("\t" + device.getType());
    }

输出:

D3DGraphicsDevice[screen=0]
        \Display0
        0
        null
    D3DGraphicsDevice[screen=1]
        \Display1
        0
        null
    D3DGraphicsDevice[screen=2]
        \Display2
        0
        null

我所期待的:

Screen[0]: S23C350
Screen[1]: Mobile PC Display
Screen[2]: S23B350

我有 3 台显示器。这些名称中的每一个都是取自“屏幕分辨率”控制面板的名称。


附加:
我试图通过此实现的另一件事是能够分辨屏幕的方向。据我所知:它可以是横向、纵向、横向(翻转)或纵向(翻转)。然后我只想在横向上运行游戏 - 翻转与否。

能够区分这两种主要类型将是我的下一步。

感谢您花时间阅读本文,如果对此问题有任何不清楚的地方,我深表歉意。

我准备使用注册表访问和可能的 dll 实现,所以我决定标记它们以防万一。

4

3 回答 3

3

成功之路

您希望访问的监视器名称信息包含在 Windows 注册表位置中:

SYSTEM\CurrentControlSet\Enum\DISPLAY

关于Get PC's Monitor Information Using .NET / WMI问题的已接受答案,有一个指向WMIMonitor的链接。

作为一个 sourceforge 项目,可以检查源是否可用,以查看此自定义 WMI 启用程序的内部工作原理:

因此,如果这个 WMI 扩展对您有用,我认为需要一个从 java 访问注册表的库,并且您可以在此处重新编写代码。

访问注册表:使用 Java 读取/写入 Windows 注册表

失败

使用对 WMI 的各种调用,未显示监视器的实际名称。然而,它提供了很多信息,因为有描述 WMI 库的信息,例如:

于 2013-06-26T16:12:44.650 回答
1

您可以从您的 Java 程序中执行 wmic DESKTOPMONITOR 并从中获取名称。

InputStream screenInfo = Runtime.getRuntime().exec("wmic DESKTOPMONITOR").getInputStream();

现在您可以从中读取信息screenInfo并找到名称。(正则表达式?)

于 2013-07-01T20:47:47.600 回答
1

要从 OS X 获取显示名称,您可以使用命令行实用程序(使用 调用Runtime.exec(...)):

system_profiler SPDisplaysDataType [-xml]

可选项-xml为您提供了一个(巨大的)PropertyListxml 结构,但应该可以使用您最喜欢的 XML 库进行解析。如果没有开关,您将有一个缩进的纯文本,我不确定这种格式的解析有多安全。

于 2013-07-02T15:01:43.250 回答