Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在Windows中将程序窗口的大小调整为任意大吗?_Windows_Screen Scraping_Screen Resolution_Autoit - Fatal编程技术网

我可以在Windows中将程序窗口的大小调整为任意大吗?

我可以在Windows中将程序窗口的大小调整为任意大吗?,windows,screen-scraping,screen-resolution,autoit,Windows,Screen Scraping,Screen Resolution,Autoit,窗口的大小(例如,打开的浏览器)似乎是根据屏幕大小或屏幕分辨率或沿着这些线的某个东西来限制的。有没有办法绕过这一点,让窗户任意高起来?有。您必须重写WM_GETMINMAXINFO。在挂钩程序中,您可以设置最大x/y: MINMAXINFO* pmmi = (MINMAXINFO*)lParam; pmmi->ptMaxTrackSize.x = desiredY; pmmi->ptMaxTrackSize.y = desiredX; 要在另一个进程上执行此操作,您可以将SetWi

窗口的大小(例如,打开的浏览器)似乎是根据屏幕大小或屏幕分辨率或沿着这些线的某个东西来限制的。有没有办法绕过这一点,让窗户任意高起来?

有。您必须重写WM_GETMINMAXINFO。在挂钩程序中,您可以设置最大x/y:

MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
pmmi->ptMaxTrackSize.x = desiredY;
pmmi->ptMaxTrackSize.y = desiredX;

要在另一个进程上执行此操作,您可以将SetWindowsHookEx()与WH_GETMESSAGE一起使用。

如果您谈论的是您自己的应用程序,您可能会渲染到用于GDI大小调整的16位坐标。适当回应WM_GETMINMAXINFO和其他人

如果您谈论的是其他人的,则无法保证他们将渲染得比屏幕更大,因为将他们的绘画剪裁到可见的位置是明智的,并且他们可能会受到其他因素的进一步限制(例如小于GDI限制的DirectX曲面的大小)

如果您正在抓取,则最好使用MSAA或UIA从外部操纵窗口并获取其文本

Martyn

#包括
#包括
$hGUI=GUICreate(“”,250100,-1,-1,比特($GUI\u SS\u DEFAULT\u GUI,$WS\u THICKFRAME))
GUICtrlCreateLabel(“”,0,0,250,100,-1,$GUI\u WS\u EX\u PARENTDRAG)
GuiseState(@SW_SHOW)
GUIRegisterMsg($WM\u GETMINMAXINFO,“WM\u GETMINMAXINFO”)
而1
$nMsg=GUIGetMsg()
交换机$nMsg
案例$GUI\u事件\u结束
GUIRegisterMsg($WM_GETMINMAXINFO,“”)
出口
终端开关
温德
Func WM_GETMINMAXINFO($hWnd、$Msg、$wParam、$lParam)
#forceref$hWnd、$Msg、$wParam、$lParam
本地$minmaxinfo=dllsstructCreate(“int;int;int;int;int;int;int;int”,$lParam)
dllsstructsetdata($minmaxinfo,7250);最小宽度
dllsstructsetdata($minmaxinfo,8100);最小高度
dllsstructsetdata($minmaxinfo,93000);最大宽幅
dllsstructsetdata($minmaxinfo,103000);最大高度
返回“GUI\u rundefmg”
EndFunc;==>WM_GETMINMAXINFO

将(部分)回答我自己的问题。事实证明,对于我自己的WinForms应用程序的特定情况,只需将Form.MaximumSize设置为足够大的值,然后增加Form.ClientSize。我猜这个MaximumSize属性是对其他答案中提到的WM_GETMINMAXINFO钩子的包装。

Martyn,您能详细说明一下“MSAA或UIA”位吗?最初的问题现在似乎已经解决了,但“知识是好的”,无论对我还是这里的其他读者来说:)MSAA(旧版)和UIA(新版)是Windows提供的两个辅助功能API,用于辅助功能工具(屏幕阅读器等)获取和修改屏幕上的UI。这使得它们在其他方面非常有用,比如测试、屏幕抓取等。它们在MSDN上有很好的文档记录,对于hwnd UI来说,一切都从WM_GETOBJECT开始。
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hGUI = GUICreate("", 250, 100, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME))
GUICtrlCreateLabel("", 0, 0, 250, 100, -1, $GUI_WS_EX_PARENTDRAG)

GUISetState(@SW_SHOW)

GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            GUIRegisterMsg($WM_GETMINMAXINFO, "")
            Exit
    EndSwitch
WEnd

Func WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
    #forceref $hWnd, $Msg, $wParam, $lParam
    Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
    DllStructSetData($minmaxinfo, 7, 250) ; min width
    DllStructSetData($minmaxinfo, 8, 100) ; min height
    DllStructSetData($minmaxinfo, 9, 3000) ; max width
    DllStructSetData($minmaxinfo, 10, 3000) ; max height
    Return "GUI_RUNDEFMSG"
EndFunc   ;==>WM_GETMINMAXINFO