找回密码
 加入
搜索
查看: 1303|回复: 9

[AU3基础] 【解决】在屏幕开启缩放的情况下设置窗口最底层后引发的尺寸变小问题

[复制链接]
发表于 2022-4-11 13:56:18 | 显示全部楼层 |阅读模式
本帖最后由 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()
在屏幕开启缩放的情况下,如果设置窗口最底层后,会引发的窗口尺寸变小,请教解决方法,谢谢!
发表于 2022-4-11 14:45:06 | 显示全部楼层
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()

评分

参与人数 1金钱 +18 收起 理由
anythinging + 18 赞一个!

查看全部评分

 楼主| 发表于 2022-4-11 13:58:18 | 显示全部楼层
尝试了创建窗口时乘以缩放位数,$Child=GUICreate("GUI",@DesktopWidth*1.25,@DesktopHeight*1.25),没有解决
发表于 2022-4-11 14:25:16 | 显示全部楼层
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")
 楼主| 发表于 2022-4-11 14:28:11 | 显示全部楼层
afan 发表于 2022-4-11 14:25
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")

感谢回复,试过了,没效果
 楼主| 发表于 2022-4-11 15:54:34 | 显示全部楼层
afan 发表于 2022-4-11 14:45
没测试环境,自己多调试。第二行注释与不注释分别测试看看@DesktopWidth值有无变化。

A版说的对,有效果。是我位置放的问题。放到guicreate之后没效果,放之前可以
 楼主| 发表于 2022-4-11 16:07:41 | 显示全部楼层
本帖最后由 anythinging 于 2022-4-11 16:12 编辑

还想请教下,关于启用dpi感知的写法?
DllCall("user32.dll", "bool", "SetProcessDPIAware") ;禁用dpi感知
 楼主| 发表于 2022-4-11 16:11:02 | 显示全部楼层
本帖最后由 anythinging 于 2022-4-11 16:12 编辑

最近是看了gyp2000的关于dpi的贴子后,最少代码实现 DPI-自适应缩放   https://www.autoitx.com/forum.ph ... hlight=%CB%F5%B7%C5
发现自己之前写的程序存在的问题,了解到有dpi感知的概念,但不清楚用法。

 楼主| 发表于 2022-4-12 22:37:04 | 显示全部楼层
afan 发表于 2022-4-11 14:25
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")

还想请教下,关于DllCall("user32.dll", "bool", "SetProcessDPIAware")是禁用dpi感知,在使用了后,是否有再次启用dpi感知的方法?
我发现Exit Run(@ScriptFullPath&)重启自身好象还是受到前面禁用dpi感知的影响。
发表于 2022-4-13 12:38:15 | 显示全部楼层
anythinging 发表于 2022-4-12 22:37
还想请教下,关于DllCall("user32.dll", "bool", "SetProcessDPIAware")是禁用dpi感知,在使用了后,是否 ...

没这需求,没试过。调用进程应该会继承父进程感知设置。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-4 09:31 , Processed in 0.084442 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表