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

时间:2011-07-17 22:11:16

标签: windows screen-scraping screen-resolution autoit

似乎窗口的大小,例如打开浏览器的大小,根据屏幕大小或屏幕分辨率或这些行的内容。有没有办法解决这个问题,让窗户任意高大?

4 个答案:

答案 0 :(得分:2)

是的。您必须覆盖WM_GETMINMAXINFO。在钩子程序中,您可以设置最大x / y:

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

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

答案 1 :(得分:2)

#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

答案 2 :(得分:1)

如果您正在谈论自己的应用程序,则可以渲染最多用于GDI大小调整的16位坐标。适当回应WM_GETMINMAXINFO和其他人。

如果你正在谈论其他人,那么他们没有承诺他们会比屏幕更大,因为将他们的绘画剪辑到可见的是明智的,并且他们可能会受到其他因素(例如尺寸)的进一步限制一个小于GDI限制的DirectX表面。

如果你正在刮你,最好使用MSAA或UIA从外面操纵窗口并获取其文本。

马丁

答案 3 :(得分:1)

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