1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

#93 support SetProcessDpiAwarenessContext for newer versions of windows

This commit is contained in:
FunkyFr3sh 2021-05-22 06:07:11 +02:00
parent f27ee16b17
commit 2425033a2f
2 changed files with 33 additions and 18 deletions

View File

@ -16,4 +16,15 @@ typedef enum PROCESS_DPI_AWARENESS {
PROCESS_PER_MONITOR_DPI_AWARE = 2
} PROCESS_DPI_AWARENESS;
DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);
#define DPI_AWARENESS_CONTEXT_UNAWARE ((DPI_AWARENESS_CONTEXT)-1)
#define DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ((DPI_AWARENESS_CONTEXT)-2)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ((DPI_AWARENESS_CONTEXT)-3)
#define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ((DPI_AWARENESS_CONTEXT)-4)
#define DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ((DPI_AWARENESS_CONTEXT)-5)
typedef HRESULT(__stdcall* SETPROCESSDPIAWERENESSPROC)(PROCESS_DPI_AWARENESS);
typedef BOOL(__stdcall* SETPROCESSDPIAWAREPROC)();
typedef BOOL(__stdcall* SETPROCESSDPIAWARENESSCONTEXTPROC)(DPI_AWARENESS_CONTEXT);
#endif

View File

@ -61,14 +61,25 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
}
BOOL set_dpi_aware = FALSE;
HMODULE hshcore = GetModuleHandle("shcore.dll");
if (hshcore)
{
typedef HRESULT(__stdcall* SETPROCESSDPIAWERENESSPROC)(PROCESS_DPI_AWARENESS value);
HMODULE shcore_dll = GetModuleHandle("shcore.dll");
HMODULE user32_dll = GetModuleHandle("user32.dll");
if (user32_dll)
{
SETPROCESSDPIAWARENESSCONTEXTPROC set_awareness_context =
(SETPROCESSDPIAWARENESSCONTEXTPROC)GetProcAddress(user32_dll, "SetProcessDpiAwarenessContext");
if (set_awareness_context)
{
set_dpi_aware = set_awareness_context(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
}
}
if (!set_dpi_aware && shcore_dll)
{
SETPROCESSDPIAWERENESSPROC set_awareness =
(SETPROCESSDPIAWERENESSPROC)GetProcAddress(hshcore, "SetProcessDpiAwareness");
(SETPROCESSDPIAWERENESSPROC)GetProcAddress(shcore_dll, "SetProcessDpiAwareness");
if (set_awareness)
{
@ -78,20 +89,13 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
}
}
if (!set_dpi_aware)
if (!set_dpi_aware && user32_dll)
{
HMODULE huser32 = GetModuleHandle("user32.dll");
if (huser32)
{
typedef BOOL(__stdcall* SETPROCESSDPIAWAREPROC)();
SETPROCESSDPIAWAREPROC set_aware =
(SETPROCESSDPIAWAREPROC)GetProcAddress(user32_dll, "SetProcessDPIAware");
SETPROCESSDPIAWAREPROC set_aware =
(SETPROCESSDPIAWAREPROC)GetProcAddress(huser32, "SetProcessDPIAware");
if (set_aware)
set_aware();
}
if (set_aware)
set_aware();
}
timeBeginPeriod(1);