; http://www.autoitscript.com/forum/topic/29735-wm-syscommand/page__hl__0xf180__fromsearch__1
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $k = 0

Global $assot[30][2] = [ _
[0xF000, 'Размер'], _ ; в системном меню
[0xF001, 'Левая грань'], _
[0xF002, 'Правая грань'], _
[0xF003, 'Верхняя грань'], _
[0xF004, 'Левый верхний угол'], _
[0xF005, 'Правый верхний угол'], _
[0xF006, 'Нижняя грань'], _
[0xF007, 'Левый нижний угол'], _
[0xF008, 'Правый нижний угол'], _
[0xF010, 'Переместить'], _ ; в системном меню
[0xF012, 'Клик по заголовку'], _
[0xF020, 'Кнопка Свернуть'], _
[0xF030, 'Кнопка Развернуть'], _
[0xF032, 'Развернуть на весь экран двойным кликом по заголовку'], _
[0xF040, '$SC_NEXTWINDOW'], _
[0xF050, '$SC_PREVWINDOW'], _
[0xF060, 'Кнопка Закрыть'], _
[0xF070, '$SC_VSCROLL'], _
[0xF090, '$SC_MOUSEMENU'], _
[0xF093, 'Системное меню'], _
[0xF095, 'Главное меню'], _
[0xF100, 'Горячая клавиша с Alt'], _
[0xF120, 'Кнопка восстановить'], _
[0xF122, 'Восстановление двойным кликом по заголовку'], _
[0xF130, '$SC_TASKLIST'], _
[0xF140, '$SC_SCREENSAVE'], _
[0xF150, '$SC_HOTKEY'], _
[0xF160, '$SC_DEFAULT'], _
[0xF170, '$SC_MONITORPOWER'], _
[0xF180, 'Кнопка Вопрос']]

; Global Const $SC_CLOSE = 0xF060 ; константы WM_SYSCOMMAND
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")
$Gui = GUICreate("WM_SYSCOMMAND", 440, 170, -1, -1, $WS_OVERLAPPEDWINDOW)
$iFileMenu = GUICtrlCreateMenu("&Файл")
$iFileItem = GUICtrlCreateMenuItem("Открыть", $iFileMenu)

GUICtrlCreateLabel('Функция WM_SYSCOMMAND выполняется при клике по заголовку, границам окна, нажатии на системные кнопки свернуть, развернуть, восстановить, закрыть.', 5, 5, 430, 51)
$data = GUICtrlCreateLabel('.' & @CRLF & @CRLF & '', 5, 65, 430, 100)
GUISetState()

While 1
	Sleep(100000)
WEnd

Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $iID, $MouseX, $MouseY, $info_ID, $Hex_ID

	; Координаты мыши относительно экрана монитора.
	$MouseX = BitAND($lParam, 0x0000FFFF) ; _WinAPI_LoWord
	$MouseY = BitShift($lParam, 16) ; _WinAPI_HiWord
	
	$iID = BitAND($wParam, 0xFFFF)

	$k += 1
	For $i = 0 To 29
		If $iID = $assot[$i][0] Then
			$info_ID = $assot[$i][1]
			ExitLoop
		EndIf
	Next
	$Hex_ID = Hex(Int($iID), 4)
	If Not $info_ID Then $info_ID = $Hex_ID
	WinSetTitle($Gui, '', 'Вызов ' & $k & ' раз, ' & $info_ID)
	
	GUICtrlSetData($data, 'Событие - ' & $info_ID & @CRLF & _
		'ID - ' & $Hex_ID & @CRLF & _
		'X -координата мыши = ' & $MouseX & @CRLF & _
		'Y -координата мыши = ' & $MouseY)
	
	; условие разрешает изменять размер только по горизонтали.
	Switch $iID
		;если добавить 0xF001 и 0xF002, то запрещает по горизонтали
		Case 0xF003, 0xF004, 0xF005, 0xF006, 0xF007, 0xF008
			Return 0
	EndSwitch
	
	If $iID = 0xF150 Then MsgBox(0, 'Сообщение', '$SC_HOTKEY')
	If $iID = 0xF060 Then Exit
	Return $GUI_RUNDEFMSG
EndFunc