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

tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010 - 10 févr. 2010 à 12:56
tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010 - 11 févr. 2010 à 15:16
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 févr. 2010 à 14:03
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
0
tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 15:11
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 févr. 2010 à 16:49
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
0
tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 16:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 févr. 2010 à 21:59
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
0
tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010
11 févr. 2010 à 11:39
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 févr. 2010 à 13:16
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
0
tcourbet Messages postés 9 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 10 février 2010
11 févr. 2010 à 15:16
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.
0
Rejoignez-nous