#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Global $hGUI, $aGUI_Pos
Global $aSysMetrics = _GetSysMetrics()
Global $iWinBorder = _GetWinBorder()
$hGUI = GUICreate('Имя окна', 200, 300, $aSysMetrics[2] - 200 - ($iWinBorder * 2), $iWinBorder)
$aGUI_Pos = WinGetPos($hGUI)
GUIRegisterMsg($WM_WINDOWPOSCHANGING, 'WM_WINDOWPOSCHANGING')
GUISetState(@SW_SHOW, $hGUI)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func WM_WINDOWPOSCHANGING($hWnd, $iMsg, $wParam, $lParam)
Switch $hWnd
Case $hGUI
Local $stWinPos = DllStructCreate($tagWINDOWPOS, $lParam)
DllStructSetData($stWinPos, 3, $aGUI_Pos[0])
DllStructSetData($stWinPos, 4, $aGUI_Pos[1])
EndSwitch
EndFunc
Func _GetSysMetrics()
Local Const $SPI_GETWORKAREA = 48
Local $stRECT = DllStructCreate($tagRECT)
_WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($stRECT))
Local $aRet[4] = [DllStructGetData($stRECT, 1), DllStructGetData($stRECT, 2), DllStructGetData($stRECT, 3), DllStructGetData($stRECT, 4)]
Return $aRet
EndFunc
Func _GetWinBorder()
Local $hWin = GUICreate('')
Local $aWCSize = WinGetClientSize($hWin)
Local $aWPos = WinGetPos($hWin)
Local $iBorder = $aWPos[2] - $aWCSize[1]
GUIDelete($hWin)
Return $iBorder
EndFunc