Lancer une application en tant que mdichild d'une application déjà ouverte

Signaler
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010
-
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010
-
Bonjour,

Je souhaiterais pouvoir créer une application qui se lance en tant que mdichild d'une application déjà lancée dont je sais qu'elle est une mdiparent et dont je connais le titre de la fenêtre.

J'essaie de récupérer le handle de la fenêtre du parent et de le définir en tant que mdiparent de mon formulaire enfant

Je m'oriente vers la solution Lib "user32" avec les fonctions setparent, getwindow, ... mais je n'y arrive pas.

Je développe sous visual studio 2008 en vb.net

Si quelqu'un a déjà fait ça...

8 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
Et quel code as-tu écrit ? (déclarations incluses)
Si tu as les deux handles, je ne vois pas où est la difficulté, en ce qui concerne l'utilisation de la fonction SetParent ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub New()

InitializeComponent()
Dim nom_fenetre As String = "<le titre de la fenêtre parente>"

SetParent(Me.Handle, FindWindow(vbNullString, nom_fenetre))

End Sub

mais ça ne fonctionne pas
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Déjà,

Les Long en VB.Net, doivent s'exprimer en Integer ....


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010

C'est corrigé mais ça n'avait pas l'air de le gêner... ça ne marche pas mieux

quand je trace FindWindow(vbNullString, nom_fenetre) j'ai un résultat différent à chaque fois.

Je ne pense pas que ça soit le handle de ma fenêtre que je récupère
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
1) il est absolument normal qu'entre deux utilisation/ouverture , le handle de ta fenêtre ne soit pas le même ! Ce handle est attribué par Windows à l'ouverture d'une fenêtre et ne reste le même qu'en tant que la fenêtre reste ouverte ! Un hautre handle lui est attribué à l'ouverture suivante ...
2) je ne comprends pas ce qui te conduit à utiliser ainsi (à l'envers) la fonction SetParent, dont le premier paramètre (celui de la fenêtre accueillie) est généralement celui de l'application en cours (celle qui utilise le code que tu as écrit) et le second celui de la fenêtre d'accueil (où tu n'as par définition rien écrit comme code). (Or, tu sembles vouloir faire l'inverse)...
Quelle peut bien être la finalité d'une telle tentative ?
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010

La valeur change à chaque test sans fermeture de la fenêtre. je mets mon programme en pause et je teste dans le debugger

Pourquoi faire l'inverse ? Parce que je veux intégrer mon application dans une application existante pour la rendre transparente pour l'utilisateur.

En l'occurence, c'est une application SAGE de Gestion commerciale. L'application permet de lancer des programmes externes et je voudrait que ces programmes se lancent dans le logiciel SAGE. Je l'ai vu tourner donc je sais que c'est possible mais je n'ai pas pu demander comment c'était fait. Je sais juste que c'est en récupérant le handle de la fenêtre SAGE et en l'utilisant en tant que parent. Je suppose qu'on doit pouvoir le faire dans des applis telles que Word ou Excel aussi.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Et moi, je suppose que le code était mis dans l'application d'accueil et non dans celle dont la fenêtre doit s'insérer dans celle de l'application d'accueil ...
Mais je me trompe peut-être ...

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
10 février 2010

Non c'est sûr et certain que ce n'est pas dans l'application d'accueil. Celui qui a fait ça est un développeur de chez SAGE mais il n'a pas touché à l'application d'accueil (Appli standard vendu à des milliers d'exemplaires). Il m'a dit que c'était avec le handle de la fenêtre. Je vais encore chercher sinon j'essaierai de le recontacter pour savoir s'il peut m'aiguiller.