diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index eb19469e8..30c1def54 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -4,6 +4,26 @@ #include #include +typedef struct +{ + WCHAR* deviceName; + uint32_t width; + uint32_t height; +} DataBundle; + +static WINBOOL enumMonitorProc(HMONITOR hMonitor, FF_MAYBE_UNUSED HDC hDC, FF_MAYBE_UNUSED LPRECT rc, LPARAM lparam) +{ + MONITORINFOEXW mi = { .cbSize = sizeof(mi) }; + DataBundle* data = (DataBundle*) lparam; + if(GetMonitorInfoW(hMonitor, (MONITORINFO *)&mi) && wcscmp(mi.szDevice, data->deviceName) == 0) + { + data->width = (uint32_t) mi.rcMonitor.right; + data->height = (uint32_t) mi.rcMonitor.bottom; + return FALSE; + } + return TRUE; +} + void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) { FF_UNUSED(instance); @@ -34,7 +54,13 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins if(EnumDisplaySettingsW(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &devMode) == 0) continue; - ffdsAppendDisplay(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, 0, 0); + DataBundle data = { + .deviceName = displayDevice.DeviceName, + .width = 0, + .height = 0, + }; + EnumDisplayMonitors(NULL, NULL, enumMonitorProc, (LPARAM)&data); + ffdsAppendDisplay(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency, data.width, data.height); } //https://github.com/hykilpikonna/hyfetch/blob/master/neofetch#L2067 diff --git a/src/util/windows/manifest.xml b/src/util/windows/manifest.xml index 420545ded..86d623144 100644 --- a/src/util/windows/manifest.xml +++ b/src/util/windows/manifest.xml @@ -16,7 +16,7 @@ UTF-8 - true + false SegmentHeap