Dieses kleine Script erstellt eine GUI, verschiebt diese und gibt dann 2x mit ConsoleWrite das Handle, WinPos und ClientSize aus.
Für die erste Ausgabe werden die Werte direkt im Script ermittelt, für die zweite mit einem Einzeiler, der mit @AutoItExe ausgeführt wird.
Meine Annahme, dass beide Ausgaben identisch sind... ist falsch, denn der Einzeiler liefert für WinPos andere Werte!
Wo ist hier der Wurm drin?
Code
;-- TIME_STAMP 2018-04-15 22:27:16 v 0.1
_Example()
Func _Example()
Local $hGUI = GUICreate(@ScriptName, 1930, 1000, -2000, -100)
GUISetState()
WinMove($hGUI, '', 10, 10, 800, 600)
__Print('+', '+', $hGUI, WinGetPos($hGUI), WinGetClientSize($hGUI))
Local $aRet = __GetPos()
__Print('!', '-', $aRet[0], StringSplit($aRet[1], '|', 2), StringSplit($aRet[2], '|', 2))
EndFunc ;==>_Example
Func __GetPos()
Local $sCMD = "Local $hWnd = WinGetHandle('[TITLE:"&@ScriptName&"]'), $aWP = WinGetPos($hWnd), $aCS = WinGetClientSize($hWnd), $0 = ClipPut(StringFormat('%s:%i|%i|%i|%i:%i|%i', $hWnd, $aWP[0], $aWP[1], $aWP[2], $aWP[3], $aCS[0], $aCS[1]))"
ConsoleWrite('@ $sCMD = ' & $sCMD & @CRLF)
RunWait(@AutoItExe & ' /AutoIt3ExecuteLine "' & $sCMD & '"')
Return StringSplit(ClipGet(), ':', 2)
EndFunc ;==>__GetPos
Func __Print($c1, $c2, $hWnd, $aWinPos, $aClientSize)
ConsoleWrite('> $hWnd = ' & $hWnd & @CRLF)
__PrintWinPos($c1 & ' $aWinPos', $aWinPos)
__PrintClientSize($c2 & ' $aClientSize', $aClientSize)
EndFunc
Func __PrintWinPos($sName, $aPos)
ConsoleWrite(StringFormat('%-26s = X: %5i, Y: %5i, W: %5i, H: %5i\r', $sName, $aPos[0], $aPos[1], $aPos[2], $aPos[3]))
EndFunc ;==>__PrintWinPos
Func __PrintClientSize($sName, $aPos)
ConsoleWrite(StringFormat('%-26s = %7s W: %5i, H: %5i\r', $sName, '', $aPos[0], $aPos[1]))
EndFunc ;==>__PrintClientSize
Alles anzeigen