diff --git a/inc/main.h b/inc/main.h index 4c07df6..8869c3a 100644 --- a/inc/main.h +++ b/inc/main.h @@ -116,4 +116,10 @@ struct IDirectDrawImplVtbl HRESULT(__stdcall *WaitForVerticalBlank)(IDirectDrawImpl *, DWORD, HANDLE); }; +typedef enum PROCESS_DPI_AWARENESS { + PROCESS_DPI_UNAWARE = 0, + PROCESS_SYSTEM_DPI_AWARE = 1, + PROCESS_PER_MONITOR_DPI_AWARE = 2 +} PROCESS_DPI_AWARENESS; + #endif diff --git a/src/main.c b/src/main.c index bd54864..7bd759d 100644 --- a/src/main.c +++ b/src/main.c @@ -58,13 +58,28 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved) //SetProcessPriorityBoost(GetCurrentProcess(), TRUE); - HMODULE user32 = GetModuleHandle("user32.dll"); - typedef BOOL (__stdcall* SetProcessDPIAware_)(); - if(user32) + BOOL setDpiAware = FALSE; + HMODULE hShcore = GetModuleHandle("shcore.dll"); + typedef HRESULT (__stdcall* SetProcessDpiAwareness_)(PROCESS_DPI_AWARENESS value); + if(hShcore) { - SetProcessDPIAware_ setProcessDPIAware = (SetProcessDPIAware_)GetProcAddress(user32, "SetProcessDPIAware"); - if (setProcessDPIAware) - setProcessDPIAware(); + SetProcessDpiAwareness_ setProcessDpiAwareness = (SetProcessDpiAwareness_)GetProcAddress(hShcore, "SetProcessDpiAwareness"); + if (setProcessDpiAwareness) + { + HRESULT result = setProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE); + setDpiAware = result == S_OK || result == E_ACCESSDENIED; + } + } + if (!setDpiAware) + { + HMODULE hUser32 = GetModuleHandle("user32.dll"); + typedef BOOL (__stdcall* SetProcessDPIAware_)(); + if(hUser32) + { + SetProcessDPIAware_ setProcessDPIAware = (SetProcessDPIAware_)GetProcAddress(hUser32, "SetProcessDPIAware"); + if (setProcessDPIAware) + setProcessDPIAware(); + } } timeBeginPeriod(1);