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

jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 - 8 juil. 2002 à 10:56
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 - 8 juil. 2002 à 17:29
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

cs_processus Messages postés 360 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 9 juillet 2008 3
8 juil. 2002 à 11:12
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
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2002 à 12:27
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
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2002 à 12:32
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
cs_processus Messages postés 360 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 9 juillet 2008 3
8 juil. 2002 à 13:05
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

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

Posez votre question
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2002 à 14:07
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
cs_processus Messages postés 360 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 9 juillet 2008 3
8 juil. 2002 à 15:36
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
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
8 juil. 2002 à 17:29
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
Rejoignez-nous