[..] Bloquer l'ordre d'affichage de 2 gui

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

[..] Bloquer l'ordre d'affichage de 2 gui

#1

Message 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.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#2

Message par TommyDDR »

Essayez d'utiliser _WinAPI_SetParent, cela devrait résoudre vos problèmes.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#3

Message par cutprod »

Merci pour votre aide.
Je test ça dès que possible.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#4

Message 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.
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#5

Message par jguinch »

Tu aurais pas un morceau de code à nous montrer ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#6

Message 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...
Cut, srcipteur du dimanche...désolé !-)
Avatar du membre
cutprod
Niveau 6
Niveau 6
Messages : 273
Enregistré le : jeu. 30 sept. 2010 17:25
Localisation : Sud Ouest
Status : Hors ligne

Re: [..] Bloquer l'ordre d'affichage de 2 gui

#7

Message 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!! :cry:
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
Cut, srcipteur du dimanche...désolé !-)
Répondre