Code : Tout sélectionner
;#include-once
;#include <Array.au3>
;#include <GuiConstants.au3>
;#include "MMBLib.au3"
#include "AnyGui.au3"
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
AutoItSetOption("WinTitleMatchMode", 4)
AutoItSetOption("WinSearchChildren", 1)
AutoItSetOption("WinWaitDelay", 0)
Global $aUtil_MinMax[4]
$ParentTitle = 'Parent'
$ChildTitle = 'Sans titre - Paint' ; Child ; Sans titre - Paint ; Sans titre - Bloc-notes ; Document - WordPad ;
$ChildFile = 'mspaint.exe' ; Child.exe ; mspaint.exe ; notepad.exe ; wordpad.exe ;
$ShowHideWindowCaption = 'unset' ; unset = Hide Window Caption ; set = Show Window Caption
InitMinMax("320","200",@DesktopWidth,@DesktopHeight) ;InitMinMax("320","200","800","600"); Cool Héééé ;-)
Run($ChildFile,"", @SW_SHOW) ; on peut indiquer @sw_hide
WinWaitActive($ChildTitle)
$ChildSize = WinGetPos($ChildTitle)
$ParentHandle = GUICreate($ParentTitle, $ChildSize[2], $ChildSize[3], $ChildSize[0], $ChildSize[1], BitOR($WS_SYSMENU + $WS_SIZEBOX + $WS_MINIMIZEBOX + $WS_MAXIMIZEBOX + $WS_Caption,$WS_CLIPCHILDREN))
GuiSetIcon($ChildFile, 0)
$ChildHandle = WinGetHandle($ChildTitle)
$ParentHandle = WinGetHandle($ParentTitle)
$ParentTitle = WinSetTitle($ParentHandle,"",$ChildTitle)
$ChildTitle = WinSetTitle($ChildHandle,"",$ChildTitle & "_Child")
ShowHideWindowCaption()
_SetParent($ChildHandle, $ParentHandle) ; Fonction: Bind "Child" dans "Parent"
;_SetParent($ParentHandle, $ChildHandle) ; Fonction: Bind "Parent" dans "Child"
;_SetParent($ChildHandle, 0) ; Fonction: UnBind "Child" de "Parent"
GUIRegisterMsg($WM_SIZING, "WM_SIZING")
WM_SIZING("","","","")
WinSetState($ChildHandle, "", @SW_SHOW)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then _Exit()
If $msg = $GUI_EVENT_MAXIMIZE Or $GUI_EVENT_RESTORE Then WM_SIZING("","","","")
WEnd
Func _SetParent($id_child, $h_parent) ; Fonction: Binder
If Not IsHWnd($h_parent) Then $h_parent = HWnd($h_parent)
If Not IsHWnd($id_child) Then $id_child = GUICtrlGetHandle($id_child)
If DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $id_child, "hwnd", $h_parent) <> 0 Then
Return 1
Else
seterror(1)
Return 0
EndIf
EndFunc ;==>_SetParent
Func ShowHideWindowCaption()
$xh = _GuiTarget($ChildHandle,1)
$Style = $WS_Caption
$ExStyle = -1
$result = _TargetStyle($ShowHideWindowCaption,1,$Style,$ExStyle,$xh) ; Show Caption Window
EndFunc ;==>ShowHideWindowCaption
Func InitMinMax($x0,$y0,$x1,$y1)
Local Const $WM_GETMINMAXINFO = 0x24 ; $WinGetHandle ; 0x24 ; Fixe la valeur de $WM_GETMINMAXINFO avec la valeur 0x24 (valeur hexadécimale attribuée de 36)
$aUtil_MinMax[0]=$x0
$aUtil_MinMax[1]=$y0
$aUtil_MinMax[2]=$x1
$aUtil_MinMax[3]=$y1
GUIRegisterMsg($WM_GETMINMAXINFO,'MY_WM_GETMINMAXINFO') ; Lance la fonction GUIRegisterMsg() pour la valeur $WM_GETMINMAXINFO et la re-dirige vers la fonction MY_WM_GETMINMAXINFO().
EndFunc ;==>InitMinMax
Func MY_WM_GETMINMAXINFO($hWnd, $Msg, $wParam, $lParam)
Local $minmaxinfo = DllStructCreate('int;int;int;int;int;int;int;int;int;int',$lParam)
DllStructSetData($minmaxinfo,7,$aUtil_MinMax[0]) ; min X
DllStructSetData($minmaxinfo,8,$aUtil_MinMax[1]) ; min Y
DllStructSetData($minmaxinfo,9,$aUtil_MinMax[2]) ; max X
DllStructSetData($minmaxinfo,10,$aUtil_MinMax[3]); max Y
Return $GUI_RUNDEFMSG ; Renvois la valeur $GUI_RUNDEFMSG à la commande qui à lancé la fonction (c'est à dire GUIRegisterMsg()). Cette valeur est une valeur fixe qui est déterminée dans GUIConstantsEx.au3
EndFunc ;==>MY_WM_GETMINMAXINFO
Func WM_SIZING($hWnd, $iMsg, $wParam, $lParam)
$SRC = -8
$ParentSize = WinGetClientSize($ParentHandle)
WinMove($ChildHandle, "", $SRC, $SRC, $ParentSize[0]-$SRC*2, $ParentSize[1]-$SRC*2)
EndFunc ;==>WM_SIZING
Func _Exit()
WinSetState($ChildHandle, "", @SW_HIDE)
$ShowHideWindowCaption = 'set'
ShowHideWindowCaption()
_SetParent($ChildHandle, 0)
$ParentSize = WinGetPos($ParentHandle)
WinMove($ChildHandle, "", $ParentSize[0], $ParentSize[1], $ParentSize[2], $ParentSize[3])
WinClose($ChildHandle, "")
Exit
EndFunc ;==>Exit