#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $k = 0
$Gui = GUICreate("WM_GETMINMAXINFO", 390, 140, -1, -1, $WS_OVERLAPPEDWINDOW)
GUICtrlCreateLabel('Функция WM_GETMINMAXINFO выполняется при перемещении окна, сворачивании и изменении размеров. Позволяет установить пределы увеличения и уменьшения окна, как по горизонтали, так и по вертикали индивидуально. А также позицию и размеры развёрнутого состояния. Установочные параметры можно игнорировать указав только необходимые параметры.', 5, 5, 360, 130)

GUISetState()

GUIRegisterMsg($WM_GETMINMAXINFO, "WM_GETMINMAXINFO")

Do
Until GUIGetMsg() = -3

Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
	#forceref $iMsg, $wParam
	$k += 1
	WinSetTitle($Gui, '', 'Попытка ' & $k & ' раз')
	If $hWnd = $Gui Then
		Local $tMINMAXINFO = DllStructCreate("int;int;" & _
			"int MaxSizeX; int MaxSizeY;" & _
			"int MaxPositionX;int MaxPositionY;" & _
			"int MinTrackSizeX; int MinTrackSizeY;" & _
			"int MaxTrackSizeX; int MaxTrackSizeY", _
			$lParam)
		DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 360) ; минимальные размеры окна
		DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 130)
		DllStructSetData($tMINMAXINFO, "MaxTrackSizeX", 460) ; максимальные размеры окна
		DllStructSetData($tMINMAXINFO, "MaxTrackSizeY", 180)
		DllStructSetData($tMINMAXINFO, "MaxSizeX", 400) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий)
		DllStructSetData($tMINMAXINFO, "MaxSizeY", 180)
		DllStructSetData($tMINMAXINFO, "MaxPositionX", 400) ; позиция в развёрнутом состоянии
		DllStructSetData($tMINMAXINFO, "MaxPositionY", 450)
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc