@@ -316,6 +316,7 @@ PyImaging_DisplayModeWin32(PyObject *self, PyObject *args) {
316316/* -------------------------------------------------------------------- */
317317/* Windows screen grabber */
318318
319+ typedef HANDLE (__stdcall * Func_GetWindowDpiAwarenessContext )(HANDLE );
319320typedef HANDLE (__stdcall * Func_SetThreadDpiAwarenessContext )(HANDLE );
320321
321322PyObject *
@@ -330,6 +331,7 @@ PyImaging_GrabScreenWin32(PyObject *self, PyObject *args) {
330331 PyObject * buffer ;
331332 HANDLE dpiAwareness ;
332333 HMODULE user32 ;
334+ Func_GetWindowDpiAwarenessContext GetWindowDpiAwarenessContext_function ;
333335 Func_SetThreadDpiAwarenessContext SetThreadDpiAwarenessContext_function ;
334336
335337 if (!PyArg_ParseTuple (
@@ -358,8 +360,19 @@ PyImaging_GrabScreenWin32(PyObject *self, PyObject *args) {
358360 SetThreadDpiAwarenessContext_function = (Func_SetThreadDpiAwarenessContext
359361 )GetProcAddress (user32 , "SetThreadDpiAwarenessContext" );
360362 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+ }
363376 }
364377
365378 if (screens == 1 ) {
0 commit comments