Soa, nach ein wenig Schlaf und ausprobieren habe ich das Problem über die Windows Message WM_MOVING gelöst.
Der Code hat Kommentare und ist hoffentlich so verständlich.
Viel Spaß damit! ![]()
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]; ACHTUNG
; Code wurde so geschrieben dass es NUR in der SciTE funktioniert (direktes ausführen per [F5])
; Prinzip per Windows Messages bleibt aber gleich
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]#include <GUIConstants.au3>
#include <StructureConstants.au3>
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]If Not $CmdLine[0] Then
$hGUI = GUICreate('', 800, 600)
GUIRegisterMsg($WM_MOVING, 'WM_MOVING') ; Wird aufgerufen wenn das Fenster bewegt wird
GUISetState()
$iPID = Run(StringFormat('"%s" "%s" "%s"', @AutoItExe, @ScriptFullPath, $hGUI), @ScriptDir, @SW_SHOW, 0x2) ; Startet einen zweiten Prozess des Programmes
[/autoit][autoit][/autoit][autoit]Do
$hChild = StdoutRead($iPID) ; Wartet auf das Handle der Child GUI
Until $hChild
StdioClose($iPID)
Else
$hChild = GUICreate('', 400, 300, -1, -1, -1, -1, $CmdLine[1])
GUISetState()
ConsoleWrite($hChild) ; Sendet das Handle der Child GUI zum Parent Fenster
EndIf
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]While GUIGetMsg() <> -3
WEnd
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit][autoit][/autoit][autoit]Func WM_MOVING($hWndGUI, $MsgID, $WParam, $LParam)
Local $aiGUI = WinGetPos($hGUI) ; Fensterposition der Parent GUI vor der Verschiebung
Local $aiChild = WinGetPos($hChild) ; Fensterposition der Child GUI
Local $tRect = DllStructCreate($tagRECT, $LParam) ; Fensterposition der Parent GUI nach der Verschiebung
If WinExists($hChild) Then WinMove($hChild, '', $aiChild[0] - ($aiGUI[0] - $tRect.Left), $aiChild[1] - ($aiGUI[1] - $tRect.Top)) ; Neue Child GUI Position berechnen und verschieben
[/autoit][autoit][/autoit][autoit]Return $GUI_RUNDEFMSG
EndFunc
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit]