@@ -316,6 +316,7 @@ PyImaging_DisplayModeWin32(PyObject *self, PyObject *args) {
316
316
/* -------------------------------------------------------------------- */
317
317
/* Windows screen grabber */
318
318
319
+ typedef HANDLE (__stdcall * Func_GetWindowDpiAwarenessContext )(HANDLE );
319
320
typedef HANDLE (__stdcall * Func_SetThreadDpiAwarenessContext )(HANDLE );
320
321
321
322
PyObject *
@@ -330,6 +331,7 @@ PyImaging_GrabScreenWin32(PyObject *self, PyObject *args) {
330
331
PyObject * buffer ;
331
332
HANDLE dpiAwareness ;
332
333
HMODULE user32 ;
334
+ Func_GetWindowDpiAwarenessContext GetWindowDpiAwarenessContext_function ;
333
335
Func_SetThreadDpiAwarenessContext SetThreadDpiAwarenessContext_function ;
334
336
335
337
if (!PyArg_ParseTuple (
@@ -358,8 +360,19 @@ PyImaging_GrabScreenWin32(PyObject *self, PyObject *args) {
358
360
SetThreadDpiAwarenessContext_function = (Func_SetThreadDpiAwarenessContext
359
361
)GetProcAddress (user32 , "SetThreadDpiAwarenessContext" );
360
362
if (SetThreadDpiAwarenessContext_function != NULL ) {
361
- // DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = ((DPI_CONTEXT_HANDLE)-3)
362
- dpiAwareness = SetThreadDpiAwarenessContext_function ((HANDLE )- 3 );
363
+ if (screens == -1 ) {
364
+ GetWindowDpiAwarenessContext_function = (Func_GetWindowDpiAwarenessContext
365
+ )GetProcAddress (user32 , "GetWindowDpiAwarenessContext" );
366
+ DPI_AWARENESS_CONTEXT dpiAwarenessContext =
367
+ GetWindowDpiAwarenessContext_function (wnd );
368
+ if (dpiAwarenessContext != NULL ) {
369
+ dpiAwareness =
370
+ SetThreadDpiAwarenessContext_function (dpiAwarenessContext );
371
+ }
372
+ } else {
373
+ // DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = ((DPI_CONTEXT_HANDLE)-3)
374
+ dpiAwareness = SetThreadDpiAwarenessContext_function ((HANDLE )- 3 );
375
+ }
363
376
}
364
377
365
378
if (screens == 1 ) {
0 commit comments