Pour les PROS: ShellExecute un EXE dans une fenetre VB....?

Signaler
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
-
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
-
Est-ce que quelqu'un sait comment faire pour qu'un exécutable lancé par l'API shellExecute apparaisse
dans une fenetre VB ou apparaisse en tant que fenêtre fille de la MDI principale de mon prog VB?

Merci aux pros qui seront me répondre, parce que ça fait un bon bout de temps que je me prend la tête la dessus...

Jockos

7 réponses

Messages postés
360
Date d'inscription
vendredi 24 août 2001
Statut
Membre
Dernière intervention
9 juillet 2008
3
Il faut que tu récupère l'handle de la fenêtre (FindWindow()) et ensuite que tu fasse un SetParentWindow(), vois la MSDN sur ces deux API...

==============
Site Web de JDPROG
Présentation de MP3 Index

http://jdprog.fr.st
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Voilà le bout de code que j'exécute et pourtant, ça m'ouvre WordView.exe indépendament de mon prog VB, dans une autre fenêtre...

Dim idWordView As Long

'Initialisation des paramètres de ShellExecute
sTopic = "Open"
sFile = App.Path + "\wordview.exe"
sParams = """" + FileName + """"
sDirectory = 0&

'Exécution de la méthode API pour ouvrir un Exe
idWordView = RunShellExecute(sTopic, sFile, sParams, sDirectory, SW_SHOWDEFAULT)

SetParent idWordView, Me.hwnd

'idWordView correspond NORMALEMENT au numéro de handle de ma fenetre WordView (contenant le fichier "FileName") ouverte avec l'API shellExecute

'Me.hwnd correspond à la fenêtre dans laquelle je veux mettre la fenetre du WordView.exe...

ça ne marche pas et je ne vois pas pourquoi????

Merci pour ton aide processus, et merci aussi à ceux qui essaie de m'aider... car le problème est loin d'être facile...
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Regarde le bout de code que j'ai mis et dis moi ce que tu en penses...
Je me demande si on peux encapsuler un objet externe à VB (en l'occurence un Exe) seulement en ayant son numéro de handle...
0
Messages postés
360
Date d'inscription
vendredi 24 août 2001
Statut
Membre
Dernière intervention
9 juillet 2008
3
T'es sûr que 'RunShellExecute()' te renvoie le bon handle ?
Sinon, fait un 'FindWindow()' sur le caption de la fenêtre, ou le nom de la classe plus puissant.
Site Web de JDPROG
Présentation de MP3 Index

http://jdprog.fr.st
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Je vais essayer...
Je te tiens au courant...

Pour le nom de la classe, je ne vois pas comment l'identifier, car le WordView.exe n'est pas implémenter dans la Base des registres Windows au niveau du nom de sa classe... (genre, je ne peux pas faire de lien OLE avec WordView.exe, parce que je n'ai pas le nom de la classe dans la base des registres)... je vais essayer avec le Caption de la fenêtre WordView.exe, mais ça me semble perdu d'avance...

En tout cas merci pour ton aide...
0
Messages postés
360
Date d'inscription
vendredi 24 août 2001
Statut
Membre
Dernière intervention
9 juillet 2008
3
Si, si, chaques contrôle Windows à un nom de classe !! Même si ce n'est pas un ActiveX (d'ailleurs sait tu que l'objet 'Form' lui même est un contrôle ? ;) ). Enfin voila, il te faut utiliser le 'ProcessViewer' pour déterminer le nom de classe de cette fenêtre.

Voili.

==============
Site Web de JDPROG
Présentation de MP3 Index

http://jdprog.fr.st
0
Messages postés
321
Date d'inscription
dimanche 22 octobre 2000
Statut
Membre
Dernière intervention
14 mai 2005
2
Disons, que je sais que tous objet VB (Formulaire, bouton, text, variable...) est une instanciation d'un classe. Mais je ne savais pas que Windows fonctionnait avec des objets...
Donc, si je te comprends bien, chaque Fenetre Windows appartient à une classe... et c'est donc tout simplement un objet (une instanciation) de cette classe...

Donc, pour connaitre la classe d'un objet (d'une fenetre en l'occurrence), il faut que j'utilise le ProcessViewer...

Merci beaucoup du conseil, je ne connaissais pas le ProcessViewer et sa va être l'occasion de le découvrir...

JE vais pouvoir voir si mon problème venait bien d'un numéro de hwnd non valide ou si sa vient de la méthode API SetParent qui hélas ne peux gérer des fenetres VB et des fenetres Windows (externes à VB)...

Je te tiens au courant...

A+
0