#include <StructureConstants.au3> ; $tagRECT

; Пример 1
; Возвращает дескриптор активного окна и использует WinGetPos для возвращения координат прямоугольника окна
$hWnd = WinGetHandle("") ; Тоже что "[active]" - получает дескриптор активного окна
$aWndPos = WinGetPos($hWnd) ; Получает координаты и размер окна

; Создаёт структуру
$tRECT = DllStructCreate($tagRECT)
If @error Then
	MsgBox(4096, "", "Ошибка создания структуры,  @error = " & @error)
	Exit
EndIf

; Делает вызов функции GetWindowRect из user32.dll
; При вызове DllCall требуется использовать указатель на структуру возвращённый функцией DllStructGetPtr
DllCall("user32.dll", "int", "GetWindowRect", _
		"hwnd", $hWnd, _
		"ptr", DllStructGetPtr($tRECT))

If @error Then
	MsgBox(4096, "", "Ошибка DllCall,  @error = " & @error)
	Exit
EndIf

;Получает возвращённые координаты прямоугольника окна
Local $iLeft = DllStructGetData($tRECT, "Left") ; или 1 вместо "Left".
Local $iTop = DllStructGetData($tRECT, 2) ; или "Top" вместо 2.
Local $iRight = DllStructGetData($tRECT, 3) ; или "Right" вместо 3.
Local $iBottom = DllStructGetData($tRECT, "Bottom") ; или 4 вместо "Bottom".

; Освобождает структуру
$tRECT = 0

; Отображает данные возвращённые функцией WinGetPos и возвращённые в структуру
MsgBox(4096, "Пример 1", "WinGetPos(): (" & $aWndPos[0] & ", " & $aWndPos[1] & ") " & _
		"(" & $aWndPos[2] + $aWndPos[0] & ", " & $aWndPos[3] + $aWndPos[1] & ")" & @CRLF & _
		"GetWindowRect(): (" & $iLeft & ", " & $iTop & ") (" & $iRight & ", " & $iBottom & ")")

;=========================================================
; Пример 2

; Создаёт структуру с данными int (целое положительное или отрицательное число)
$tStruct1 = DllStructCreate("int")
If @error Then
	MsgBox(4096, "", "Ошибка создания структуры,  @error = " & @error)
	Exit
EndIf

; DllStructGetPtr ссылка на элемент. Кроме того, значение будет присвоено согласно новому определению типа uint
$tStruct2 = DllStructCreate("uint", DllStructGetPtr($tStruct1, 1))
If @error Then
	MsgBox(4096, "", "Ошибка создания структуры,  @error = " & @error)
	Exit
EndIf

$tStruct3 = DllStructCreate("float", DllStructGetPtr($tStruct1, 1))
If @error Then
	MsgBox(4096, "", "Ошибка создания структуры,  @error = " & @error)
	Exit
EndIf

; Устанавливает данные
DllStructSetData($tStruct1, 1, -1)

; Показывает различия типов данных тех же самых данных
MsgBox(4096, "DllStruct", _
		"Указатели на структуру и их данные" & @CRLF & _
		"$tStruct1: " & DllStructGetPtr($tStruct1, 1) & @TAB & "int:    " & DllStructGetData($tStruct1, 1) & @CRLF & _
		"$tStruct2: " & DllStructGetPtr($tStruct2, 1) & @TAB & "uint:  " & DllStructGetData($tStruct2, 1) & @CRLF & _
		"$tStruct3: " & DllStructGetPtr($tStruct3, 1) & @TAB & "float: " & DllStructGetData($tStruct3, 1))

; Указатели на структуру те же самые, так как указывают на ту же область в памяти.

; Освобождает выделенную память
$tStruct1 = 0
$tStruct2 = 0
$tStruct3 = 0