Resolution: add support for Windows

This commit is contained in:
李通洲 2022-10-05 19:52:16 +08:00
parent 0d3d881c24
commit e59f4e7e45
3 changed files with 34 additions and 9 deletions

View File

@ -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()

View File

@ -1,14 +1,38 @@
#include "displayserver.h"
#include <dwmapi.h>
#include <WinUser.h>
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);
}
}

View File

@ -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;
}