Page 1 sur 1
[..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 15:37
par cutprod
Bonjour et bonnes fêtes à tous.
Je travaille sur un script qui asservi un autre prog:
la gui de mon script s'ouvre et déplace la gui d'un autre prog (démarré depuis mon script) pour la positionner à l’intérieur d'elle même (genre le prog numéro 2 fais parti de mon script).
Jusqu' ici tout va bien mais j'ai un problème avec les WinSetOnTop : je voudrai que quelque soit l'endroit ou je click l'ordre de mes guis reste le même, à savoir la gui n° 2 sur la gui n°1.
Peut être en faisant de la gui n°2 un enfant de la n°1 ?
Pour l'instant j'essaie avec des WinSetOnTop, mais c'est pas super!
Quelqu'un a une idée?
Merci d'avance.
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 16:23
par TommyDDR
Essayez d'utiliser _WinAPI_SetParent, cela devrait résoudre vos problèmes.
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 16:36
par cutprod
Merci pour votre aide.
Je test ça dès que possible.
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 21:40
par cutprod
Ça ne fonctionne pas.
Ou du moins ça fonctionne mais des que je click sur la gui de mon script ça le fais frezzer impossible faire plus... obliger de killer le processus depuis le gestionnaire de tâches!
Je pense que c'est a cause de (doc autoit _WinAPI_SetParent):
The new parent window and the child window must belong to the same application.
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 22:14
par jguinch
Tu aurais pas un morceau de code à nous montrer ?
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : lun. 29 déc. 2014 23:34
par cutprod
ça devrait fonctionner!!, je suis entrain de décortiquer mon script (je test en ajoutant des fonctions petit a petit...)
En essayant de le simplifier pour le poster j'ai constaté que dans sa version minimale (de mon script) _WinAPI_SetParent($handle,$Form1) fonctionne sans problèmes. Donc au boulot...
Re: [..] Bloquer l'ordre d'affichage de 2 gui
Posté : mar. 30 déc. 2014 21:44
par cutprod
Voila j'ai ma réponse : mon prog externe supporte très bien que sa gui devienne l'enfant de la gui de mon script... sauf si je rajoute un $group dans mes contrôles!!
J'ai fait le test avec exactement la même fonction et un $group dans la gui: si notepad.exe comme prog externe et tout fonctionne par contre avec mon autre prog externe (RoboRealm) tout plante (sauf si je vire le $group):
Code : Tout sélectionner
Func test()
$array_pos_gui_principale = WinGetPos($Form1)
ShellExecute("notepad.exe")
WinWait("[CLASS:Notepad]", "", 10)
$handle = WinGetHandle("[CLASS:Notepad]")
WinMove($handle,"",$array_pos_gui_principale[0] + 3,$array_pos_gui_principale[1] + 25,684,480)
_WinAPI_SetParent($handle,$Form1)
EndFunc
Merci a ceux qui ont essayé de m'aider.
PS: pour l'instant je m'en sort(le blocage de l'ordre d'affichage) avec un
"$Form1 = GUICreate("", 1029, 583, 10, 10, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))" sur ma gui
et "_WinAPI_SetWindowLong ($handle, $GWL_HWNDPARENT, $Form1)"
sur l'autre gui, mais pas de déplacements possible pour les 2 gui en même temps (sauf à faire une fonction qui détecte le déplacements de l'une et bouge l'autre en conséquence...) long et pas essentiel: je bloque les déplacements:
Code : Tout sélectionner
Func OnSysCommand($hWnd, $Msg, $wParam, $lParam)
$test = BitAND($wParam, 0xFFF0)
If $test = 0xF010 Then;OR $test = 0xF020 Then
Return False
EndIf
Return $GUI_RUNDEFMSG
EndFunc