OUVRIR UNE APPLI EN .EXE DANS UNE FORM EN VB2005

pc152 Messages postés 38 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 9 octobre 2008 - 14 juil. 2007 à 12:40
cs_didine13 Messages postés 96 Date d'inscription mardi 18 août 2009 Statut Membre Dernière intervention 14 août 2013 - 23 août 2010 à 22:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43443-ouvrir-une-appli-en-exe-dans-une-form-en-vb2005

cs_didine13 Messages postés 96 Date d'inscription mardi 18 août 2009 Statut Membre Dernière intervention 14 août 2013
23 août 2010 à 22:33
Pas encore en 2005 mais très très bien
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 juil. 2010 à 17:25
Bonjour,

Déjà très belle source MERCI :) simple et efficace. Par contre en l'état si on execute la commande cmd et non notepad (ou si le système est très occupé sa ne fonctionne plus (et ajouter un sleep dans tout cas est dommage, surtout qu'on ne sait pas à l'avance combien de temps vas prendre le système a affiché cette fenêtre :/). J'ai trouvé comme solution de tester sa et d'attendre 100 ms entre chaque test (et donc éviter de surcharger inutilement le système, en prime il n'est plus utile d'utilisé la commande shell :)). Enfin berf voila la mise à jour que je propose :

Private Sub bnlancer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnlancer.Click
procap.StartInfo.WindowStyle = ProcessWindowStyle.Normal
procap.StartInfo.FileName = "notepad.exe"
'procap.StartInfo.FileName = "cmd"
procap.Start()
hInst = procap.Id

While procap.MainWindowHandle = 0
System.Threading.Thread.CurrentThread.Sleep(100)
Try
procap = Process.GetProcessById(hInst) 'Retourne un nouveau composant Process, en fonction de l'identificateur de notepad
Catch ex As Exception
'Le programme exécuter est déjà terminé
Exit Sub
End Try
End While
hWndApp = procap.MainWindowHandle 'récup de l'handle
nomproc = procap.MainWindowTitle 'récup du titre -- inutile--
bncap.Enabled = True
bnlancer.Enabled = False
End Sub
cs_xav2303 Messages postés 5 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 21 octobre 2009
21 oct. 2009 à 21:33
perso j'ai rajouter comme proposé ci dessus des System.Threading.Thread.Sleep a quelque endroit et ca marche impec' ;)

j'ai modifier à cet endroit :

Private Sub bnlancer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnlancer.Click
'lignes de code prévues au départ mais l'Id obtenue est fausse
'*************************************************************
'procap.StartInfo.WindowStyle = ProcessWindowStyle.Normal
'procap.StartInfo.FileName = "notepad.exe"
'procap.Start()
'hInst = procap.Id

'en faisant comme ça , c'est peut-être pas très ..... mais ça marche
hInst = Shell("C:\Program Files\OS Info 1.0 Bêta\OS Info.exe", AppWinStyle.NormalFocus) 'lance notepad et récup de l'Id
System.Threading.Thread.Sleep(300)
procap = Process.GetProcessById(hInst) 'Retourne un nouveau composant Process, en fonction de l'identificateur de notepad
System.Threading.Thread.Sleep(200)
hWndApp = procap.MainWindowHandle 'récup de l'handle
nomproc = procap.MainWindowTitle 'récup du titre -- inutile--
bncap.Enabled = True
bnlancer.Enabled = False
End Sub


voilà !



Lvxie
La facilité et la légerté
http://www.lvxie.eg2.fr/
lvxie@hotmail.fr
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
18 juil. 2007 à 11:13
Malheureusement ca ne marhce pas non plus... Si quelqu'un à une idée qu'il n'hesite pas :)
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
18 juil. 2007 à 03:41
Bonsoir fdiedler2000
Si tu ne l'as pas déjà fait , essaie avec process.start, en mettant System.Threading.Thread.sleep(100) ou même (200) avant de récupérer la valeur de Handle. Ca permet parfois de récupérer la bonne valeur au lieu de Zéro.Je debut en VB2005, je n'ai pas encore assez de connaissance pour approfondir le problème.J'espère qu'une âme charitable aura la gentillesse de nous éclairer de ses lumières.

A+
Spoty
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 juil. 2007 à 13:45
Désolé j'ai pas fini ma phrase :

Je disais avec Filezilla, Dreameweaver ou autre ca ne marche plus, Le handle vaut 0 ...
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 juil. 2007 à 13:44
Salut, j'ai deja créé un programme qui fait la meme chose et j'ai testé ta source et je rencontre le meme probleme :

Ca ne marche qu'avec des process de Windows (Notepad, aide,...) avec d'autre programmes genre FileZilla, Dreamweaver...

Mais le plus bizarre ca marche très bien avec Excel et Word mais pas avec Outlook !

Avez vous une idée ?
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
16 juil. 2007 à 16:57
Bonjour Dnx
Personellement, j'ai un problème avec le retour de valeur de Handle et Id avec Process c'est pour celà que j'ai contourné le bugg avec shell.
Je viens de tester un autre contournement qui a l'air de marcher:
mettre un System.Threading.Thread.sleep(100) ou même 200 avant de récupérer l'Handle ou l'Id.
Sinon je n'ai pas fait de test réseau c'est hors de mes connaîssances actuelles.
Si tu peux m'envoyer ton code modifié en MP,j'y jetterai un oeil histoire de m'instruire.
Je pense pouvoir faire bientot une mise à joue de la source avec fonction "Ecrire dans l'application"(par code).
A+
cs_Dnx Messages postés 16 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 16 juillet 2007
16 juil. 2007 à 09:44
Hello, sympa la source :)

mais je n'arrive pas a démarrer une application sur le réseau...
avec le shell, il ma lance une erreur "fileNotFoundException"
par contre en utilisant le Process.start, la pas d'erreur mais le SetParent ne marche plus :(


une idée?

merci ;)
TigerFab Messages postés 115 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 18 mai 2008
15 juil. 2007 à 12:25
Belle source, simple et efficace
bravo
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
14 juil. 2007 à 23:31
bonsoir PC152
Je n' ai pas excel, donc je ne peux pas faire de test. Je connais très peu VB2005 et les languages de moins de 10 ans et même plutôt 15.
(Je pianote en VB2005 depuis seulement 5 jours).
Pour écrire dans notepad avec le clavier pas de problème, mais impossible d'écrire en passant par le code !!!(je ne connais pas la solution).
Il y a apparemment un problème de handle mais je n'en suis pas sure du tout.
J'ai remarqué que une fois le programme capturé il apparaissait nulle part en child dans la form ou dans la textbox. C'est surement l'origine de ton problème.
J'espère qu'un esprit éclairé pourra nous aider à résoudre cette énigme.
Désolé de ne pouvoir d'aider .
A+
pc152 Messages postés 38 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 9 octobre 2008
14 juil. 2007 à 12:40
Source très bien, petit note j'ai mit excel au lieu du bloc note, cela fonctionne en partie mais je ne peux pas saisir dans les cellule ni me servire des scroll bar, si tu peu voir d'ou cela provient ;)
Rejoignez-nous