Java 连接的监视器名称

Java 连接的监视器名称,java,c++,display,Java,C++,Display,我正在开发一个使用额外显示器(Wacom平板电脑)的应用程序。 我需要确定它放在哪里,但我从java代码中收集的DisplayName总是Display0、Display1等。。。 我尝试使用一个小的C++来获得系统显示: void DumpDevice(const DISPLAY_DEVICE& dd, size_t nSpaceCount) { printf("%*sDevice Name: %s\n", nSpaceCount, "", dd.DeviceName);

我正在开发一个使用额外显示器(Wacom平板电脑)的应用程序。 我需要确定它放在哪里,但我从java代码中收集的DisplayName总是Display0、Display1等。。。 我尝试使用一个小的C++来获得系统显示:

void DumpDevice(const DISPLAY_DEVICE& dd, size_t nSpaceCount)
{   
    printf("%*sDevice Name: %s\n", nSpaceCount, "", dd.DeviceName);
    printf("%*sDevice String: %s\n", nSpaceCount, "", dd.DeviceString);
    printf("%*sState Flags: %x\n", nSpaceCount, "", dd.StateFlags);
    printf("%*sDeviceID: %s\n", nSpaceCount, "", dd.DeviceID);
    printf("%*sDeviceKey: ...%s\n\n", nSpaceCount, "", dd.DeviceKey + 42);
}

int main()
{
    DISPLAY_DEVICE dd;

    dd.cb = sizeof(DISPLAY_DEVICE);

    DWORD deviceNum = 0;
    while (EnumDisplayDevices(NULL, deviceNum, &dd, 0)){
        DumpDevice(dd, 0);
        DISPLAY_DEVICE newdd = { 0 };
        newdd.cb = sizeof(DISPLAY_DEVICE);
        DWORD monitorNum = 0;
        while (EnumDisplayDevices(dd.DeviceName, monitorNum, &newdd, 0))
        {
            DumpDevice(newdd, 4);
            monitorNum++;
        }
        puts("");
        deviceNum++;
    }

    system("pause");

    return 0;
}
(我从stack overflow的另一个答案中得到了这段代码,但我不记得链接到它的页面)

不管怎样,输出确实没有用处:

Device Name: \
Device String: I
State Flags: 5
DeviceID: P
DeviceKey: ...\

    Device Name: \
    Device String: G
    State Flags: 3
    DeviceID: M
    DeviceKey: ...\


Device Name: \
Device String: I
State Flags: 1
DeviceID: P
DeviceKey: ...\

    Device Name: \
    Device String: G
    State Flags: 3
    DeviceID: M
    DeviceKey: ...\


Device Name: \
Device String: I
State Flags: 1
DeviceID: P
DeviceKey: ...\

    Device Name: \
    Device String: G
    State Flags: 3
    DeviceID: M
    DeviceKey: ...\


Device Name: \
Device String: I
State Flags: 8000000
DeviceID: P
DeviceKey: ...\


Device Name: \
Device String: I
State Flags: 0
DeviceID: P
DeviceKey: ...\


Device Name: \
Device String: I
State Flags: 0
DeviceID: P
DeviceKey: ...\
有什么线索可以解决这个问题吗


编辑:所有这些都需要在java应用程序中使用C++来创建简单的包,使用JNI调用我的包。如果存在一个更好的方式,而不从C++传递则更好。

< P>我改为ANSII字符集,现在输出如下(感谢SirDarius的提示):


我如何才能看到显示器的友好名称,所有显示为通用PnP

如果您使用C++,那么为什么在编辑@ @ AyHOSESEY中解释的<代码> java < /COD>标签,查看了<代码>图形环境.GETSeleDeVIESES()/Code >和<代码> GraceStaseSuths/Code > CLSASE C++程序,使用ANSI或Unicode编译?显示设备使用TCHAR,这是Unicode上的宽字符类型,printf中的“%s”不可能打印。只显示第一个字符,因为第二个字节始终为0。我使用Unicode,是否必须打开ANSI?
Device Name: \\.\DISPLAY1
Device String: Intel(R) HD Graphics Family
State Flags: 5
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0000

    Device Name: \\.\DISPLAY1\Monitor0
    Device String: Generic PnP Monitor
    State Flags: 3
    DeviceID: MONITOR\AUO133D\{4d36e96e-e325-11ce-bfc1-08002be10318}\0003
    DeviceKey: ...\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0003


Device Name: \\.\DISPLAY2
Device String: Intel(R) HD Graphics Family
State Flags: 1
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0001

    Device Name: \\.\DISPLAY2\Monitor0
    Device String: Generic PnP Monitor
    State Flags: 3
    DeviceID: MONITOR\DELA0B9\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004
    DeviceKey: ...\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004


Device Name: \\.\DISPLAY3
Device String: Intel(R) HD Graphics Family
State Flags: 1
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0002

    Device Name: \\.\DISPLAY3\Monitor0
    Device String: Generic PnP Monitor
    State Flags: 3
    DeviceID: MONITOR\WAC1039\{4d36e96e-e325-11ce-bfc1-08002be10318}\0006
    DeviceKey: ...\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0006


Device Name: \\.\DISPLAY4
Device String: Intel(R) HD Graphics Family
State Flags: 8000000
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0003


Device Name: \\.\DISPLAY5
Device String: Intel(R) HD Graphics Family
State Flags: 8000000
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0004


Device Name: \\.\DISPLAY6
Device String: Intel(R) HD Graphics Family
State Flags: 8000000
DeviceID: PCI\VEN_8086&DEV_0A16&SUBSYS_05CB1028&REV_0B
DeviceKey: ...\Control\Video\{80DB7D25-0399-49FD-A13A-F5FEAD8FCC0B}\0005