[R] Identifiant d'une fenêtre parent

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Patrick22
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 24 déc. 2014 17:29
Status : Hors ligne

[R] Identifiant d'une fenêtre parent

#1

Message par Patrick22 »

Bonjour,

J'ai développé un script réutilisable par include qui créé une GUI. Il peut donc être utilisé depuis n'importe quelle GUI, en appelant une fonction du script include créant ainsi une nouvelle GUI.
J'aimerais connaître l'identifiant de la GUI qui l'utilise pour faire de la GUI réutilisable une fenêtre enfant de celle la créant.

Code : Tout sélectionner

GUI1.au3
#include <ScriptCreantGUI.au3>
  $iGUI1_Id = GUICreate(...)
  FonctionDeScriptCreantGUI(...)
  ...

ScriptCreantGUI.au3
  Func FonctionDeScriptCreantGUI(...)
     Quel est la valeur de $iGUI1_Id ?
     ...
  EndFunc
Pour l'instant je ne vois que le passage d'un paramètre à l'appel de la fonction créant la GUI réutilisable ou l'obligation de déclarer $iGUI1_Id variable globale. :cry:
Serait-il possible de connaître cet identifiant autrement, par une fonction AutoIt ou une macro référence ?

J'ai bien cherché une solution sur le net, les aides, les forums ... Rien.
Il me semble qu'en C# c'est possible de récupérer l'identifiant de la fenêtre parent. :idea: Windows permettrait donc cela.

Quelqu'un saurait comment faire çà, SVP ?

Merci.
Modifié en dernier par Patrick22 le ven. 06 mars 2015 00:27, modifié 3 fois.
Si tu sais ce que tu fais, tu ne peux faire que ce que tu sais déjà faire.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: Identifiant d'une fenêtre parent

#2

Message par blacksoul305 »

Bonjour,

tu devrais vraiment lire les règles de présentation d'un message :) Le soucis ne vient pas de l'orthographe, mais soit tu t'es trompé d'endroit où poster ton message (tu écris dans la partie où les membres du forum se présentent) et ton titre n'est pas conforme aux règles à ce sujet là, ou alors tu t'es trompé au niveau du contenu de ton message et tu voulais simplement te présenter Mais le titre de ton message ne serait là non plus conforme aux règles donc... Héhé !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: Identifiant d'une fenêtre parent

#3

Message par jguinch »

Message déplacé dans la bonne section.
Merci de modifier le titre du sujet afin qu'il respecte les règles de présentation d'un message.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Patrick22
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 24 déc. 2014 17:29
Status : Hors ligne

Re: Identifiant d'une fenêtre parent

#4

Message par Patrick22 »

Désolé ! :oops: :oops:
Dire que je les avais lues ... mais pas quand j'en avais besoin et dans l'agacement devant ce problème résiduel mineur, mais important pour l'ergonomie, j'ai oublié. :oops:
Merci pour le déplacement dans le bon forum :wink: .
Si tu sais ce que tu fais, tu ne peux faire que ce que tu sais déjà faire.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#5

Message par jguinch »

Il n'y a malheureusement pas de fonction ou macro qui permet de récupérer le handle de la dernière GUI créée/utilisée.
On doit forcément connaître le handle de la fenêtre.

La seule astuce que j'avais trouvé sur le forum US était de créer un contrôle factice et récupérer sa fenêtre parent (puis supprimer le contrôle).
http://www.autoitscript.com/forum/topic ... ?p=1205714
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#6

Message par orax »

Et ça ?
► Afficher le texte
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Patrick22
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 24 déc. 2014 17:29
Status : Hors ligne

Re: [R] Identifiant d'une fenêtre parent

#7

Message par Patrick22 »

@jguinch , j'ai testé le code proposé : Impeccable 8) .
Merci. :wink:

Il me suffit de créer le contrôle factice avant de créer la nouvelle GUI. Il se retrouve donc dans la GUI appelante et j'en obtiens le handle.
Et, cerise sur le gâteau, la fonction _WinAPI_GetParent ne contient que ceci:

Code : Tout sélectionner

Func _WinAPI_GetParent($hWnd)
    Local $aResult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hWnd)
    If @error Then Return SetError(@error, @extended, 0)

    Return $aResult[0]
EndFunc   ;==>_WinAPI_GetParent
que je peux coder dans mon script et éviter ainsi l'include de WinAPI.au3 (3200 lignes, sans compter ses propres includes :!: )
You know what ? I'm happy ! :|
:mrgreen:
Modifié en dernier par Patrick22 le ven. 06 mars 2015 01:34, modifié 1 fois.
Si tu sais ce que tu fais, tu ne peux faire que ce que tu sais déjà faire.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#8

Message par blacksoul305 »

Il faut éditer le titre du premier message pour clore le sujet ! :)
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#9

Message par jguinch »

@orax : je comprends plutôt qu'ici le but est de récupérer le handle de la dernière GUI créée ou utilisée (via GuiSwitch), en ne connaissant ni le titre, ni aucune autre info. Cette GUI peut d'ailleurs ne pas exister (si GuiSetState n'a pas encore été appelé). Dans ton code, si tu supprimes GuiSetState, ça ne fonctionne plus... :cry:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#10

Message par orax »

Arfff j'ai dû lire trop vite... Image
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Identifiant d'une fenêtre parent

#11

Message par jguinch »

Disons que j'ai compris du premier coup parce que j'ai déjà été confronté au problème. Mais c'est vrai qu'à première vue, on pense pas à ça :wink:

Edit
@Patrick22 : je modifie le titre du premier sujet en [R].
Je le fais pour cette fois, la prochaine fois, c'est ton tour :roll:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Patrick22
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 24 déc. 2014 17:29
Status : Hors ligne

Re: [R] Identifiant d'une fenêtre parent

#12

Message par Patrick22 »

@orax, ton message est arrivé pendant que j'essayais la proposition de @jguinch.

Bon ben c'est encore plus direct avec ta solution !
Identifiant handle de la fenêtre parent = WinGetHandle("") :o

Mais comme le dit @jguinch, je ne connais rien de la GUI appelante. Dommage, j'aimais bien cette solution. Je l'avais essayé mais avec une GUI utilisant un GuiSetState.

Merci à vous deux :wink: .

Edit
Pour la clôture du sujet, il n'est pas mentionné dans "Présentation d'un message" qu'il faille éditer le premier message. :P Comment deviner ? Intuitivement, on répond et on clôt sur le message de réponse : La solution la plus simple est souvent la meilleure. C'est ce que j'avais fait.
Bon maintenant je fais partie des "sachants" :D. Je n'aurais plus d'excuses.
Modifié en dernier par Patrick22 le ven. 06 mars 2015 01:35, modifié 3 fois.
Si tu sais ce que tu fais, tu ne peux faire que ce que tu sais déjà faire.
Avatar du membre
Patrick22
Niveau 3
Niveau 3
Messages : 44
Enregistré le : mer. 24 déc. 2014 17:29
Status : Hors ligne

Re: [R] Identifiant d'une fenêtre parent

#13

Message par Patrick22 »

Allez je relance de dix ! :)

Dans _WinAPI_GetParent on utilise :
Local $aResult = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $hWnd)

En allant sur MSDN Library comme le conseille l'aide AutoIt, on trouve aussi une utilisation possible de GetWindow et de GetAncestor

:idea: J'ai essayé un DllCall avec ces fonctions. Un appel a été productif :
Local $aResult = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $hWnd, "uint", 4) (4 est la valeur de GW_OWNER)
Voila le résultat :
  • $aResult[0] = Handle GUI appelante.
    $aResult[1] = Handle GUI créée, c.-à-d. $hWnd
    $aResult[2] = 4, c.-à-d. GW_OWNER
Qu'est-ce que vous en pensez ? :?:
On dirait bien que c'est une bonne solution pour connaître le handle de la GUI appelante sans créer de contrôle fictif, non ? :)

Pour mon cas, malheureusement ça ne sert pas :lol: puisqu'il me faut cette info avant d'avoir créer la GUI enfant.
Je continue avec la solution signalée par @jguinch.
Si tu sais ce que tu fais, tu ne peux faire que ce que tu sais déjà faire.
Répondre