anythinging 发表于 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()在屏幕开启缩放的情况下,如果设置窗口最底层后,会引发的窗口尺寸变小,请教解决方法,谢谢!

afan 发表于 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()

anythinging 发表于 2022-4-11 13:58:18

尝试了创建窗口时乘以缩放位数,$Child=GUICreate("GUI",@DesktopWidth*1.25,@DesktopHeight*1.25),没有解决

afan 发表于 2022-4-11 14:25:16

前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")

anythinging 发表于 2022-4-11 14:28:11

afan 发表于 2022-4-11 14:25
前面加一行代码,以禁用DPI感知试试
DllCall("user32.dll", "bool", "SetProcessDPIAware")

感谢回复,试过了,没效果

anythinging 发表于 2022-4-11 15:54:34

afan 发表于 2022-4-11 14:45
没测试环境,自己多调试。第二行注释与不注释分别测试看看@DesktopWidth值有无变化。

A版说的对,有效果。是我位置放的问题。放到guicreate之后没效果,放之前可以

anythinging 发表于 2022-4-11 16:07:41

本帖最后由 anythinging 于 2022-4-11 16:12 编辑

还想请教下,关于启用dpi感知的写法?
DllCall("user32.dll", "bool", "SetProcessDPIAware") ;禁用dpi感知

anythinging 发表于 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感知的概念,但不清楚用法。

anythinging 发表于 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感知的影响。

afan 发表于 2022-4-13 12:38:15

anythinging 发表于 2022-4-12 22:37
还想请教下,关于DllCall("user32.dll", "bool", "SetProcessDPIAware")是禁用dpi感知,在使用了后,是否 ...

没这需求,没试过。调用进程应该会继承父进程感知设置。
页: [1]
查看完整版本: 【解决】在屏幕开启缩放的情况下设置窗口最底层后引发的尺寸变小问题