2016-01-07 84 views
4

我正在開發使用附加顯示器(Wacom Tablet)的應用程序。 我需要確定在其被放置,但我從Java代碼收集DisplayName的總是顯示0,顯示器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; 
} 

(I從堆棧溢出的另一個答案獲取此代碼,但我不記得鏈接到它的頁面)。

輸出,反正真的不是有用:

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++傳遞更好。

+1

如果您使用C++,那麼爲什麼'java'標籤? –

+0

在編輯@a_horse_with_no_name – Razlo3p

+0

中進行了解釋查看'GraphicsEnvironment.getScreenDevices()'http://docs.oracle.com/javase/8/docs/api/java/awt/GraphicsEnvironment.html#getScreenDevices--和' GraphicsDevice'類 –

回答

2

我改ANSII字符集,現在輸出的是以下(感謝SirDarius的提示):

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 

我怎麼能看到監視器的友好名稱,所有人都表現爲通用即插即用!