_WinAPI_SetWindowPlacement
Устанавливает позицию и размер окна для свёрнутого, развернутого и восстановленного состояния
#include <WinAPI.au3>
_WinAPI_SetWindowPlacement($hWnd, $pWindowPlacement)
Параметры
$hWnd | Дескриптор окна |
$pWindowPlacement | Указатель на структуру $tagWINDOWPLACEMENT |
Возвращаемое значение
Успех: | Возвращает True |
Ошибка: | Возвращает False, @error = 1, @extended = _WinAPI_GetLastError() |
См. также
_WinAPI_GetWindowPlacement, $tagWINDOWPLACEMENTСм. также
Искать SetWindowPlacement в библиотеке MSDNПример
#include <WinAPI.au3>
Local $hWnd, $iRET, $pStruct, $sMsg, $stRET
; Запуск блокнота для выполнения действий с ним
Run("notepad.exe")
$hWnd = WinWait("[CLASS:Notepad]", "", 5)
If Not $hWnd Then Exit MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
WinMove($hWnd, "", 256, 256, 400, 400) ; перемещаем окно
Sleep(1000)
; Минимизирует блокнот и далее вывод значений возвращённых функцией _WinAPI_GetWindowPlacement()
WinSetState($hWnd, "", @SW_MINIMIZE)
$stRET = _WinAPI_GetWindowPlacement($hWnd)
If @error Then
MsgBox(16, "Ошибка", "Сбой _WinAPI_GetWindowPlacement()" & @CRLF & _
"$stRET = " & $stRET & @CRLF & _
"@error = " & @error & @CRLF & _
"@extended = " & @extended)
Else
$sMsg = "$stWindowPlacement:" & @CRLF & @CRLF
$sMsg &= @TAB & "length = " & DllStructGetData($stRET, "length") & @CRLF
$sMsg &= @TAB & "flags = " & DllStructGetData($stRET, "flags") & @CRLF
$sMsg &= @TAB & "showCmd = " & DllStructGetData($stRET, "showCmd") & @CRLF & @CRLF
$sMsg &= "ptMinPosition:" & @CRLF
$sMsg &= @TAB & "MinX = " & DllStructGetData($stRET, "ptMinPosition", 1) & @CRLF
$sMsg &= @TAB & "MinY = " & DllStructGetData($stRET, "ptMinPosition", 2) & @CRLF & @CRLF
$sMsg &= "ptMaxPosition:" & @CRLF
$sMsg &= @TAB & "MaxX = " & DllStructGetData($stRET, "ptMaxPosition", 1) & @CRLF
$sMsg &= @TAB & "MaxY = " & DllStructGetData($stRET, "ptMaxPosition", 2) & @CRLF & @CRLF
$sMsg &= "rcNormalPosition:" & @CRLF
$sMsg &= @TAB & "left = " & DllStructGetData($stRET, "rcNormalPosition", 1) & @CRLF
$sMsg &= @TAB & "top = " & DllStructGetData($stRET, "rcNormalPosition", 2) & @CRLF
$sMsg &= @TAB & "right = " & DllStructGetData($stRET, "rcNormalPosition", 3) & @CRLF
$sMsg &= @TAB & "bottom = " & DllStructGetData($stRET, "rcNormalPosition", 4)
MsgBox(64, "Успешно", $sMsg)
; Изменяет прямоугольник нормального/восстановленного состояния с помощью _WinAPI_SetWindowPlacement() и далее восстанавливает окно
DllStructSetData($stRET, "rcNormalPosition", 128, 1); левая
DllStructSetData($stRET, "rcNormalPosition", 128, 2); верхняя
DllStructSetData($stRET, "rcNormalPosition", @DesktopWidth - 128, 3); правая
DllStructSetData($stRET, "rcNormalPosition", @DesktopHeight - 128, 4); нижняя
$pStruct = DllStructGetPtr($stRET); Получает указатель модифицированной структуры
$iRET = _WinAPI_SetWindowPlacement($hWnd, $pStruct)
If @error Then
MsgBox(16, "Ошибка", "Сбой _WinAPI_SetWindowPlacement()" & @CRLF & _
"$iRET = " & $iRET & @CRLF & _
"@error = " & @error & @CRLF & _
"@extended = " & @extended)
Else
WinSetState($hWnd, "", @SW_RESTORE) ; восстанавливает окно
ControlSetText($hWnd, "", "Edit1", "_WinAPI_SetWindowPlacement() успешно!")
EndIf
EndIf