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++傳遞更好。
如果您使用C++,那麼爲什麼'java'標籤? –
在編輯@a_horse_with_no_name – Razlo3p
中進行了解釋查看'GraphicsEnvironment.getScreenDevices()'http://docs.oracle.com/javase/8/docs/api/java/awt/GraphicsEnvironment.html#getScreenDevices--和' GraphicsDevice'類 –