【解决】在屏幕开启缩放的情况下设置窗口最底层后引发的尺寸变小问题
本帖最后由 anythinging 于 2022-4-11 18:41 编辑#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
Local $msg,$Child,$hwnd
$Child=GUICreate("GUI",@DesktopWidth,@DesktopHeight)
GUISetState(@SW_SHOW)
MsgBox(262144,'','现在正常')
$hwnd=WinGetHandle("Program Manager","")
_WinAPI_SetParent($Child,$hwnd)
MsgBox(262144,'','缩小了')
While 1
If GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
Sleep(50)
WEnd
GUIDelete()在屏幕开启缩放的情况下,如果设置窗口最底层后,会引发的窗口尺寸变小,请教解决方法,谢谢!
anythinging 发表于 2022-4-11 14:28
感谢回复,试过了,没效果
没测试环境,自己多调试。第二行注释与不注释分别测试看看@DesktopWidth值有无变化。
#include <WinAPI.au3>
;~ DllCall("user32.dll", "bool", "SetProcessDPIAware")
Local $msg, $Child, $hwnd
$Child = GUICreate("GUI", @DesktopWidth, @DesktopHeight)
GUISetState(@SW_SHOW)
MsgBox(262144, '现在正常', @DesktopWidth & ' x ' & @DesktopHeight)
$hwnd = WinGetHandle("Program Manager", "")
_WinAPI_SetParent($Child, $hwnd)
MsgBox(262144, '', '缩小了')
While 1
If GUIGetMsg() = -3 Then ExitLoop
;~ Sleep(50)
WEnd
GUIDelete() 尝试了创建窗口时乘以缩放位数,$Child=GUICreate("GUI",@DesktopWidth*1.25,@DesktopHeight*1.25),没有解决
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware") afan 发表于 2022-4-11 14:25
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")
感谢回复,试过了,没效果 afan 发表于 2022-4-11 14:45
没测试环境,自己多调试。第二行注释与不注释分别测试看看@DesktopWidth值有无变化。
A版说的对,有效果。是我位置放的问题。放到guicreate之后没效果,放之前可以
本帖最后由 anythinging 于 2022-4-11 16:12 编辑
还想请教下,关于启用dpi感知的写法?
DllCall("user32.dll", "bool", "SetProcessDPIAware") ;禁用dpi感知
本帖最后由 anythinging 于 2022-4-11 16:12 编辑
最近是看了gyp2000的关于dpi的贴子后,最少代码实现 DPI-自适应缩放 https://www.autoitx.com/forum.ph ... hlight=%CB%F5%B7%C5
发现自己之前写的程序存在的问题,了解到有dpi感知的概念,但不清楚用法。
afan 发表于 2022-4-11 14:25
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")
还想请教下,关于DllCall("user32.dll", "bool", "SetProcessDPIAware")是禁用dpi感知,在使用了后,是否有再次启用dpi感知的方法?
我发现Exit Run(@ScriptFullPath&)重启自身好象还是受到前面禁用dpi感知的影响。 anythinging 发表于 2022-4-12 22:37
还想请教下,关于DllCall("user32.dll", "bool", "SetProcessDPIAware")是禁用dpi感知,在使用了后,是否 ...
没这需求,没试过。调用进程应该会继承父进程感知设置。
页:
[1]