diff --git a/Makefile b/Makefile index 207634b..36df067 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ ffrunner.res: ffrunner.rc $(WINDRES) ffrunner.rc -O coff -o ffrunner.res ffrunner.exe: ffrunner.res $(SRC) $(HDR) - $(CC) -std=c99 -pedantic -mwindows -Wl,--large-address-aware -O0 -g $(SRC) -o ffrunner.exe ffrunner.res -lwindowscodecs -lwininet -ldxgi -lshcore + $(CC) -std=c99 -pedantic -mwindows -Wl,--large-address-aware -O0 -g $(SRC) -o ffrunner.exe ffrunner.res -lwindowscodecs -lwininet -ldxgi gdbs: wine /usr/share/win32/gdbserver.exe localhost:10000 ffrunner.exe diff --git a/ffrunner.c b/ffrunner.c index 4e2e8e8..76a0a1c 100644 --- a/ffrunner.c +++ b/ffrunner.c @@ -551,6 +551,26 @@ print_args() printf("force-opengl: %s\n", args.forceOpenGl ? "true" : "false"); } +void +enable_dpi_awareness() { + HMODULE shcore = LoadLibraryA("shcore.dll"); + if (shcore) { + SetProcessDpiAwarenessFunc setDpiAwareness = + (SetProcessDpiAwarenessFunc)GetProcAddress(shcore, "SetProcessDpiAwareness"); + if (setDpiAwareness) { + if (setDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE) == S_OK) { + logmsg("Set DPI awareness to PROCESS_PER_MONITOR_DPI_AWARE\n"); + } else { + logmsg("Failed to set DPI awareness: %d\n", GetLastError()); + } + } + FreeLibrary(shcore); + } else { + // Fallback for older systems + SetProcessDPIAware(); + } +} + int main(int argc, char **argv) { @@ -565,18 +585,7 @@ main(int argc, char **argv) print_args(); init_logging(args.logPath, args.verboseLogging); - PROCESS_DPI_AWARENESS dpi; - if (GetProcessDpiAwareness(NULL, &dpi) == S_OK) { - if (dpi == PROCESS_DPI_UNAWARE) { - if (SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE) == S_OK) { - logmsg("Set DPI awareness to PROCESS_PER_MONITOR_DPI_AWARE\n"); - } else { - logmsg("Failed to set DPI awareness: %d\n", GetLastError()); - } - } - } else { - logmsg("Failed to get DPI awareness: %d\n", GetLastError()); - } + enable_dpi_awareness(); if (args.serverAddress == NULL) { logmsg("No server address provided."); diff --git a/ffrunner.h b/ffrunner.h index 08336f0..9d3ab7e 100644 --- a/ffrunner.h +++ b/ffrunner.h @@ -35,6 +35,8 @@ #define ARRLEN(x) (sizeof(x)/sizeof(*x)) #define MIN(a, b) (a > b ? b : a) +typedef HRESULT (WINAPI *SetProcessDpiAwarenessFunc)(PROCESS_DPI_AWARENESS awareness); + typedef NPError (OSCALL *NP_GetEntryPointsFuncOS)(NPPluginFuncs*); typedef NPError (OSCALL *NP_InitializeFuncOS)(NPNetscapeFuncs*); typedef NPError (OSCALL *NP_ShutdownFuncOS)(void);