OUVRIR UNE APPLI EN .EXE DANS UNE FORM EN VB2005

Signaler
Messages postés
38
Date d'inscription
vendredi 24 novembre 2000
Statut
Membre
Dernière intervention
9 octobre 2008
-
Messages postés
96
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
14 août 2013
-
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

Messages postés
96
Date d'inscription
mardi 18 août 2009
Statut
Membre
Dernière intervention
14 août 2013

Pas encore en 2005 mais très très bien
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

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
Messages postés
5
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
21 octobre 2009

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
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008

Malheureusement ca ne marhce pas non plus... Si quelqu'un à une idée qu'il n'hesite pas :)
Afficher les 12 commentaires