From bd67e0b8ba13e4df12e98bfa3731ae5f1498ca42 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 28 Apr 2008 17:16:57 +0000 Subject: [PATCH] - implement more details for display adapter page - enlarge general details groupbox svn path=/trunk/; revision=33181 --- reactos/base/applications/dxdiag/display.c | 76 ++++++++++++++++++- .../base/applications/dxdiag/lang/de-DE.rc | 48 ++++++------ .../base/applications/dxdiag/lang/en-US.rc | 48 ++++++------ .../base/applications/dxdiag/lang/fr-FR.rc | 2 + .../base/applications/dxdiag/lang/pl-PL.rc | 2 + .../base/applications/dxdiag/lang/ru-RU.rc | 4 +- reactos/base/applications/dxdiag/resource.h | 2 + reactos/base/applications/dxdiag/system.c | 3 + 8 files changed, 134 insertions(+), 51 deletions(-) diff --git a/reactos/base/applications/dxdiag/display.c b/reactos/base/applications/dxdiag/display.c index 72804775218..dfba185247d 100644 --- a/reactos/base/applications/dxdiag/display.c +++ b/reactos/base/applications/dxdiag/display.c @@ -20,6 +20,70 @@ InitializeDialog(HWND hwndDlg) SP_DEVINFO_DATA InfoData; DWORD dwIndex = 0; WCHAR szText[100]; + WCHAR szFormat[30]; + HKEY hKey; + DWORD dwMemory; + DEVMODE DevMode; + + DISPLAY_DEVICEW DispDevice; + + /* query display device adapter */ + ZeroMemory(&DispDevice, sizeof(DISPLAY_DEVICEW)); + DispDevice.cb = sizeof(DISPLAY_DEVICEW); + if (!EnumDisplayDevicesW(NULL, 0, &DispDevice, 0)) + return FALSE; + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, &DispDevice.DeviceKey[18], 0, KEY_READ, &hKey) != ERROR_SUCCESS) + return FALSE; + + if (GetRegValue(hKey, NULL, L"HardwareInformation.ChipType", REG_BINARY, szText, sizeof(szText))) + { + /* set chip type */ + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_CHIP, WM_SETTEXT, 0, (LPARAM)szText); + } + + if (GetRegValue(hKey, NULL, L"HardwareInformation.DacType", REG_BINARY, szText, sizeof(szText))) + { + /* set DAC type */ + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_DAC, WM_SETTEXT, 0, (LPARAM)szText); + } + + if (GetRegValue(hKey, NULL, L"HardwareInformation.MemorySize", REG_BINARY, &dwMemory, sizeof(dwMemory))) + { + /* set chip memory size */ + if (dwMemory > (1048576)) + { + /* buggy ATI driver requires that */ + dwMemory /= 1048576; + } + szFormat[0] = L'\0'; + if (LoadStringW(hInst, IDS_FORMAT_ADAPTER_MEM, szFormat, sizeof(szFormat)/sizeof(WCHAR))) + szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; + swprintf(szText, szFormat, dwMemory); + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_MEM, WM_SETTEXT, 0, (LPARAM)szText); + } + + /* retrieve current display mode */ + DevMode.dmSize = sizeof(DEVMODE); + if (EnumDisplaySettingsW(DispDevice.DeviceName, ENUM_CURRENT_SETTINGS, &DevMode)) + { + szFormat[0] = L'\0'; + if (LoadStringW(hInst, IDS_FORMAT_ADAPTER_MODE, szFormat, sizeof(szFormat)/sizeof(WCHAR))) + szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; + swprintf(szText, szFormat, DevMode.dmPelsWidth, DevMode.dmPelsHeight, DevMode.dmBitsPerPel, DevMode.dmDisplayFrequency); + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_MODE, WM_SETTEXT, 0, (LPARAM)szText); + } + + /* query attached monitor */ + wcscpy(szText, DispDevice.DeviceName); + ZeroMemory(&DispDevice, sizeof(DISPLAY_DEVICEW)); + DispDevice.cb = sizeof(DISPLAY_DEVICEW); + if (EnumDisplayDevicesW(szText, 0, &DispDevice, 0)) + { + /* set monitor name */ + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_MONITOR, WM_SETTEXT, 0, (LPARAM)DispDevice.DeviceString); + } + hInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_DISPLAY, NULL, hwndDlg, DIGCF_PRESENT|DIGCF_PROFILE); if (hInfo == INVALID_HANDLE_VALUE) @@ -37,11 +101,15 @@ InitializeDialog(HWND hwndDlg) if (SetupDiGetDeviceRegistryPropertyW(hInfo, &InfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szText, sizeof(szText), NULL)) SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_ID, WM_SETTEXT, 0, (LPARAM)szText); + /* set the manufacturer name */ + if (SetupDiGetDeviceRegistryPropertyW(hInfo, &InfoData, SPDRP_MFG, NULL, (PBYTE)szText, sizeof(szText), NULL)) + SendDlgItemMessageW(hwndDlg, IDC_STATIC_ADAPTER_VENDOR, WM_SETTEXT, 0, (LPARAM)szText); + + /* FIXME + * we currently enumerate only the first adapter + */ + break; } - /* FIXME - * only enumerate the first display adapter - */ - break; if (GetLastError() == ERROR_NO_MORE_ITEMS) break; diff --git a/reactos/base/applications/dxdiag/lang/de-DE.rc b/reactos/base/applications/dxdiag/lang/de-DE.rc index 0346838e479..b225574a8a5 100644 --- a/reactos/base/applications/dxdiag/lang/de-DE.rc +++ b/reactos/base/applications/dxdiag/lang/de-DE.rc @@ -49,7 +49,7 @@ IDD_DISPLAY_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Gerдt", -1, 10, 10, 220, 100 + GROUPBOX "Gerдt", -1, 10, 10, 250, 100 RTEXT "Name:", -1, 20, 25, 70, 10 RTEXT "Hersteller:", -1, 20, 35, 70, 10 RTEXT "Chiptyp:", -1, 20, 45, 70, 10 @@ -57,29 +57,29 @@ BEGIN RTEXT "Gesamtspeicher ca.:", -1, 20, 65, 70, 10 RTEXT "Anzeigemodus:", -1, 20, 75, 70, 10 RTEXT "Monitor:", -1, 20, 85, 70, 10 - LTEXT "", IDC_STATIC_ADAPTER_ID, 95, 25, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VENDOR, 95, 35, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_CHIP, 95, 45, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DAC, 95, 55, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MEM, 95, 65, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MODE, 95, 75, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MONITOR, 95, 85, 130, 10 + LTEXT "", IDC_STATIC_ADAPTER_ID, 95, 25, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_VENDOR, 95, 35, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_CHIP, 95, 45, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_DAC, 95, 55, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MEM, 95, 65, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MODE, 95, 75, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MONITOR, 95, 85, 150, 10 - GROUPBOX "Treiber", -1, 240, 10, 220, 100 - RTEXT "Hauptreiber:", -1, 245, 30, 55, 10 - RTEXT "Version:", -1, 245, 40, 55, 10 - RTEXT "Datum:", -1, 245, 50, 55, 10 - RTEXT "Mit WHQL-Logo:", -1, 245, 60, 55, 10 - RTEXT "Mini-VDD:", -1, 245, 70, 55, 10 - RTEXT "VDD:", -1, 245, 80, 55, 10 - RTEXT "DDI-Version:", -1, 245, 90, 55, 10 - LTEXT "", IDC_STATIC_ADAPTER_DRIVER, 305, 30, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VERSION, 305, 40, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DATE, 305, 50, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_LOGO, 305, 60, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MINIVDD, 305, 70, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VDD, 305, 80, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DDI, 305, 90, 130, 10 + GROUPBOX "Treiber", -1, 270, 10, 220, 100 + RTEXT "Hauptreiber:", -1, 275, 25, 55, 10 + RTEXT "Version:", -1, 275, 35, 55, 10 + RTEXT "Datum:", -1, 275, 45, 55, 10 + RTEXT "Mit WHQL-Logo:", -1, 275, 55, 55, 10 + RTEXT "Mini-VDD:", -1, 275, 65, 55, 10 + RTEXT "VDD:", -1, 275, 75, 55, 10 + RTEXT "DDI-Version:", -1, 275, 85, 55, 10 + LTEXT "", IDC_STATIC_ADAPTER_DRIVER, 335, 25, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_VERSION, 335, 35, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_DATE, 335, 45, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_LOGO, 335, 55, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_MINIVDD, 335, 65, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_VDD, 335, 75, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_DDI, 335, 85, 100, 10 GROUPBOX "ReactX-Funktionen", -1, 10, 115, 450, 60 RTEXT "DirectDraw-Beschleunigung:", -1, 15, 130, 110, 12 @@ -186,4 +186,6 @@ BEGIN IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?" IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?" IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?" + IDS_FORMAT_ADAPTER_MEM "%u MB" + IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)" END diff --git a/reactos/base/applications/dxdiag/lang/en-US.rc b/reactos/base/applications/dxdiag/lang/en-US.rc index a264721800a..831ee69c29d 100644 --- a/reactos/base/applications/dxdiag/lang/en-US.rc +++ b/reactos/base/applications/dxdiag/lang/en-US.rc @@ -49,7 +49,7 @@ IDD_DISPLAY_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Device", -1, 10, 10, 220, 100 + GROUPBOX "Device", -1, 10, 10, 250, 100 RTEXT "Name:", -1, 20, 25, 70, 10 RTEXT "Manufacturer:", -1, 20, 35, 70, 10 RTEXT "Chip Type:", -1, 20, 45, 70, 10 @@ -57,29 +57,29 @@ BEGIN RTEXT "Approx. Total Memory:", -1, 20, 65, 70, 10 RTEXT "Current Display Mode:", -1, 20, 75, 70, 10 RTEXT "Monitor:", -1, 20, 85, 70, 10 - LTEXT "", IDC_STATIC_ADAPTER_ID, 95, 25, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VENDOR, 95, 35, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_CHIP, 95, 45, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DAC, 95, 55, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MEM, 95, 65, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MODE, 95, 75, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MONITOR, 95, 85, 130, 10 + LTEXT "", IDC_STATIC_ADAPTER_ID, 95, 25, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_VENDOR, 95, 35, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_CHIP, 95, 45, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_DAC, 95, 55, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MEM, 95, 65, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MODE, 95, 75, 150, 10 + LTEXT "", IDC_STATIC_ADAPTER_MONITOR, 95, 85, 150, 10 - GROUPBOX "Driver", -1, 240, 10, 220, 100 - RTEXT "Main Driver:", -1, 245, 30, 55, 10 - RTEXT "Version:", -1, 245, 40, 55, 10 - RTEXT "Date:", -1, 245, 50, 55, 10 - RTEXT "WHQL-Logo:", -1, 245, 60, 55, 10 - RTEXT "Mini-VDD:", -1, 245, 70, 55, 10 - RTEXT " vvdddVDD:", -1, 245, 80, 55, 10 - RTEXT "DDI Version:", -1, 245, 90, 55, 10 - LTEXT "", IDC_STATIC_ADAPTER_DRIVER, 305, 30, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VERSION, 305, 40, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DATE, 305, 50, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_LOGO, 305, 60, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_MINIVDD, 305, 70, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_VDD, 305, 80, 130, 10 - LTEXT "", IDC_STATIC_ADAPTER_DDI, 305, 90, 130, 10 + GROUPBOX "Driver", -1, 270, 10, 220, 100 + RTEXT "Main Driver:", -1, 275, 25, 55, 10 + RTEXT "Version:", -1, 275, 35, 55, 10 + RTEXT "Date:", -1, 275, 45, 55, 10 + RTEXT "WHQL-Logo:", -1, 275, 55, 55, 10 + RTEXT "Mini-VDD:", -1, 275, 65, 55, 10 + RTEXT " vvdddVDD:", -1, 275, 75, 55, 10 + RTEXT "DDI Version:", -1, 275, 85, 55, 10 + LTEXT "", IDC_STATIC_ADAPTER_DRIVER, 335, 35, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_VERSION, 335, 35, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_DATE, 335, 45, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_LOGO, 335, 55, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_MINIVDD, 335, 65, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_VDD, 335, 75, 100, 10 + LTEXT "", IDC_STATIC_ADAPTER_DDI, 335, 85, 100, 10 GROUPBOX "ReactX-Features", -1, 10, 115, 450, 60 RTEXT "DirectDraw Acceleration:", -1, 15, 130, 110, 12 @@ -186,4 +186,6 @@ BEGIN IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?" IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?" IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?" + IDS_FORMAT_ADAPTER_MEM "%u MB" + IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)" END diff --git a/reactos/base/applications/dxdiag/lang/fr-FR.rc b/reactos/base/applications/dxdiag/lang/fr-FR.rc index 194105007e7..02b70ac97c9 100644 --- a/reactos/base/applications/dxdiag/lang/fr-FR.rc +++ b/reactos/base/applications/dxdiag/lang/fr-FR.rc @@ -186,4 +186,6 @@ BEGIN IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?" IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?" IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?" + IDS_FORMAT_ADAPTER_MEM "%u MB" + IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)" END diff --git a/reactos/base/applications/dxdiag/lang/pl-PL.rc b/reactos/base/applications/dxdiag/lang/pl-PL.rc index c3c2011235b..a39a898eacc 100644 --- a/reactos/base/applications/dxdiag/lang/pl-PL.rc +++ b/reactos/base/applications/dxdiag/lang/pl-PL.rc @@ -193,4 +193,6 @@ BEGIN IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?" IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?" IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?" + IDS_FORMAT_ADAPTER_MEM "%u MB" + IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)" END diff --git a/reactos/base/applications/dxdiag/lang/ru-RU.rc b/reactos/base/applications/dxdiag/lang/ru-RU.rc index 8ccf3210715..99d32a56598 100644 --- a/reactos/base/applications/dxdiag/lang/ru-RU.rc +++ b/reactos/base/applications/dxdiag/lang/ru-RU.rc @@ -177,6 +177,7 @@ BEGIN IDS_DIRECTPLAY_MODEMCONN "Modem Connection For DirectPlay" IDS_DIRECTPLAY_SERIALCONN "Serial Connection For DirectPlay" IDS_REG_SUCCESS "OK" + IDS_REG_FAIL "Ошибка" IDS_DDTEST_ERROR "Сбой в проверке!" IDS_DDTEST_DESCRIPTION "Будет произведена проверка DirecDraw на этом устройстве. Продолжить?" IDS_DDPRIMARY_DESCRIPTION "This test will use DirectDraw to draw on primary surface. Black and white rectangles should be drawn. Continue?" @@ -185,5 +186,6 @@ BEGIN IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?" IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?" IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?" - IDS_REG_FAIL "Ошибка" + IDS_FORMAT_ADAPTER_MEM "%u MB" + IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)" END diff --git a/reactos/base/applications/dxdiag/resource.h b/reactos/base/applications/dxdiag/resource.h index e3cddd644d0..72ada3e3af9 100644 --- a/reactos/base/applications/dxdiag/resource.h +++ b/reactos/base/applications/dxdiag/resource.h @@ -119,6 +119,8 @@ #define IDS_DDFULLSCREEN_DESCRIPTION 10122 #define IDS_DDFULLSCREEN_RESULT 10123 #define IDS_DDTEST_TITLE 10124 +#define IDS_FORMAT_ADAPTER_MEM 10125 +#define IDS_FORMAT_ADAPTER_MODE 10126 /* icon resource constants */ #define IDI_APPICON 20000 diff --git a/reactos/base/applications/dxdiag/system.c b/reactos/base/applications/dxdiag/system.c index dfc0bf1f056..31f89111d4e 100644 --- a/reactos/base/applications/dxdiag/system.c +++ b/reactos/base/applications/dxdiag/system.c @@ -31,6 +31,9 @@ GetRegValue(HKEY hBaseKey, LPWSTR SubKey, LPWSTR ValueName, DWORD Type, LPWSTR R if (res != ERROR_SUCCESS) return FALSE; + if (Size == sizeof(DWORD)) + return TRUE; + Result[(Size / sizeof(WCHAR))-1] = L'\0'; return TRUE; }