Jump to content

Recommended Posts

Posted

hi, short question.

is it possible to change dpi setting GLOBALLY (win7), ie. from 150% to 100%???

Your workaround is fine for autoit controls, but is it possible it will work in windows' notepad?

My script is writing ascii art in 800x800 pixels notepad empty document. And it looks fine...if someone has "standard" dpi set to 100%, otherwise it looks ugly of course. Any idea how to avoid this situation?

PS. SplashTextOn text doesn't look good neither for non standard dpi settings:(

thank you in advance

  • 1 year later...
Posted (edited)

Thanks to @Deye here is link to read: High-DPI Scaling Improvements for Desktop Applications in the Windows 10 Creators Update (1703)

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted (edited)

Here is my findings:

https://docs.microsoft.com/en-us/windows/desktop/api/_hidpi/

 

btw.
I am not a WindowsAPI specialist but I think that the functions described in the above URL link, will be useful for recalculating window coordinates and window elements coordinates.

especially this one:

LogicalToPhysicalPointForPerMonitorDPI Converts a point in a window from logical coordinates into physical coordinates, regardless of the dots per inch (dpi) awareness of the caller.
PhysicalToLogicalPointForPerMonitorDPI

Converts a point in a window from logical coordinates into physical coordinates, regardless of the dots per inch (dpi) awareness of the caller.

 

Edited by mLipok

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Posted

and example:

#include <MsgBoxConstants.au3>
#include <StructureConstants.au3>

_Example()

Func _Example()
    Local $iSystem_DPI = _WinAPI_GetDpiForSystem()
    If @error Then MsgBox($MB_ICONERROR, '_WinAPI_GetDpiForSystem()', '@error = ' & @error & @CRLF & '@extended = ' & @extended)
    ConsoleWrite("! System DPI = " &  $iSystem_DPI & @CRLF)

    Local $hWindow = WinGetHandle("[REGEXPTITLE:(?i)(.*" & @ScriptName & ".*SciTE.*?)]")

    Local $iWindow_DPI = _WinAPI_GetDpiForWindow($hWindow)
    If @error Then MsgBox($MB_ICONERROR, '_WinAPI_GetDpiForWindow', '@error = ' & @error & @CRLF & '@extended = ' & @extended)
    ConsoleWrite("! Window DPI = " &  $iWindow_DPI & @CRLF)

    Local $tPoint = DllStructCreate($tagPOINT)
    DllStructSetData($tPoint, "X", 100)
    DllStructSetData($tPoint, "Y", 200)
    _WinAPI_LogicalToPhysicalPointForPerMonitorDPI($hWindow, $tPoint)
    If @error Then MsgBox($MB_ICONERROR, 'ERROR', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

    ConsoleWrite("! X Pos L>P = " &  DllStructGetData($tPoint, "X") & @CRLF)
    ConsoleWrite("! Y Pos L>P = " &  DllStructGetData($tPoint, "Y") & @CRLF)

    _WinAPI_PhysicalToLogicalPointForPerMonitorDPI($hWindow, $tPoint)
    If @error Then MsgBox($MB_ICONERROR, 'ERROR', '@error = ' & @error & @CRLF & '@extended = ' & @extended)

    ConsoleWrite("! X Pos P>L = " &  DllStructGetData($tPoint, "X") & @CRLF)
    ConsoleWrite("! Y Pos P>L = " &  DllStructGetData($tPoint, "Y") & @CRLF)

EndFunc   ;==>_Example

Func _WinAPI_LogicalToPhysicalPointForPerMonitorDPI($hWnd, ByRef $tPoint)
    ; Minimum supported client: Windows 8.1 [desktop apps only]
    Local $aRet = DllCall('user32.dll', 'bool', 'LogicalToPhysicalPointForPerMonitorDPI', 'hwnd', $hWnd, 'struct*', $tPoint)
    If @error Then Return SetError(@error, @extended, 0)

    Return $aRet[0]
EndFunc   ;==>_WinAPI_LogicalToPhysicalPointForPerMonitorDPI

Func _WinAPI_PhysicalToLogicalPointForPerMonitorDPI($hWnd, ByRef $tPoint)
    ; Minimum supported client: Windows 8.1 [desktop apps only]
    Local $aRet = DllCall('user32.dll', 'bool', 'PhysicalToLogicalPointForPerMonitorDPI', 'hwnd', $hWnd, 'struct*', $tPoint)
    If @error Then Return SetError(@error, @extended, 0)

    Return $aRet[0]
EndFunc   ;==>_WinAPI_LogicalToPhysicalPointForPerMonitorDPI

Func _WinAPI_GetDpiForWindow($hWnd)
    ; Minimum supported client: Windows 10, version 1607 [desktop apps only]
    Local $aRet = DllCall('user32.dll', 'int', 'GetDpiForWindow', 'hwnd', $hWnd)
    If @error Then Return SetError(@error, @extended, 0)

    Return $aRet[0]
EndFunc   ;==>_WinAPI_LogicalToPhysicalPointForPerMonitorDPI

Func _WinAPI_GetDpiForSystem()
    ; Minimum supported client: Windows 10, version 1607 [desktop apps only]
    Local $aRet = DllCall('user32.dll', 'int', 'GetDpiForSystem')
    If @error Then Return SetError(@error, @extended, 0)

    Return $aRet[0]
EndFunc   ;==>_WinAPI_LogicalToPhysicalPointForPerMonitorDPI

 

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor other useful stuff click the following button:

  Reveal hidden contents

Signature last update: 2023-04-24

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...