diff --git a/CMakeLists.txt b/CMakeLists.txt index a57e3451..495d2794 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -311,7 +311,7 @@ if(WIN_MSYS) src/detection/bios/bios_windows.cpp src/detection/board/board_windows.cpp src/detection/os/os_linux.c - src/detection/gpu/gpu_linux.c + src/detection/gpu/gpu_windows.cpp src/detection/battery/battery_linux.c src/detection/displayserver/displayserver_windows.c src/detection/terminalfont/terminalfont_linux.c @@ -448,6 +448,7 @@ elseif(WIN_MSYS) PRIVATE "-lwbemuuid" PRIVATE "-lole32" PRIVATE "-loleaut32" + PRIVATE "-ldwmapi" ) endif() diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index 8427c7cb..a990e2e8 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -1,14 +1,38 @@ #include "displayserver.h" +#include +#include + void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance) { FF_UNUSED(instance); - ffStrbufInitA(&ds->wmProcessName, 0); - ffStrbufInitA(&ds->wmPrettyName, 0); - ffStrbufInitA(&ds->wmProtocolName, 0); - ffStrbufInitA(&ds->deProcessName, 0); - ffStrbufInitA(&ds->dePrettyName, 0); - ffStrbufInitA(&ds->deVersion, 0); - ffListInitA(&ds->resolutions, sizeof(FFResolutionResult), 0); + BOOL enabled; + if(SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled == TRUE) + { + ffStrbufInitS(&ds->wmProcessName, "dwm.exe"); + ffStrbufInitS(&ds->wmPrettyName, "Desktop Window Manager"); + } + else + { + ffStrbufInitS(&ds->wmProcessName, "internal"); + ffStrbufInitS(&ds->wmPrettyName, "internal"); + } + ffStrbufInit(&ds->wmProtocolName); + ffStrbufInit(&ds->deProcessName); + ffStrbufInit(&ds->dePrettyName); + ffStrbufInit(&ds->deVersion); + ffListInit(&ds->resolutions, sizeof(FFResolutionResult)); + + DISPLAY_DEVICEW displayDevice = { .cb = sizeof(DISPLAY_DEVICEW) }; + for(DWORD devNum = 0; EnumDisplayDevicesW(NULL, devNum, &displayDevice, 0) != 0; ++devNum) + { + if(!(displayDevice.StateFlags & DISPLAY_DEVICE_ACTIVE)) + continue; + DEVMODEW devMode = { .dmSize = sizeof(DEVMODEW) }; + if(EnumDisplaySettingsW(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &devMode) == 0) + continue; + + ffdsAppendResolution(ds, devMode.dmPelsWidth, devMode.dmPelsHeight, devMode.dmDisplayFrequency); + } } diff --git a/src/detection/wmtheme/wmtheme_linux.c b/src/detection/wmtheme/wmtheme_linux.c index 0650d2f4..19765c79 100644 --- a/src/detection/wmtheme/wmtheme_linux.c +++ b/src/detection/wmtheme/wmtheme_linux.c @@ -224,6 +224,6 @@ bool ffDetectWmTheme(FFinstance* instance, FFstrbuf* themeOrError) return detectOpenbox(instance, &wm->dePrettyName, themeOrError); ffStrbufAppendS(themeOrError, "Unknown WM: "); - ffStrbufAppend(themeOrError, &wm->dePrettyName); + ffStrbufAppend(themeOrError, &wm->wmPrettyName); return false; }