4

追加のモニター (ワコム タブレット) を使用するアプリケーションを開発しています。どこに配置されているかを特定する必要がありますが、Javaコードから収集したDisplayNameは常にDisplay 0、Display 1などです...小さな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;
}

(スタックオーバーフローに関する別の回答からこのコードを取得しましたが、リンクするページを覚えていません)。

とにかく、出力は実際には役に立ちません:

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 ++から渡さずにこれを行うためのより良い方法が存在する場合は、より良いです。

4

1 に答える 1