jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012
-
27 mars 2007 à 01:35
jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012
-
28 mars 2007 à 20:29
Salut,
Je suis en train de développer un programme qui démarre une application avec le chemin du exe et son nom.
Pour démarrer l'application :
process = Diagnostics.Process.Start(VarProg), "-w -ns")
l'application démarre parfaitement
Le problème survient lorsque j'essaie de fermer l'application
Pour arreter :
process.Kill()
Ca me sort cette erreur :
Cannot process request because the process has exited.
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 27 mars 2007 à 08:07
Salut,
Je peux te trouver une solution, mais il me faut quelques infos. Sur
quel langage, tu programmes (VB6, VBA, VB.NET) ? et quel est le nom du
processus de ton application que tu veux lancer ?
jnbrunet, tout dépend de ce que tu lance. Par exemple si tu lance un programme qui en lance un autre...
ta variable 'process' sera liée au premier programme, qui terminera assez tôt, laissant la place au deuxième, qui sera lui affiché.
a voir si dans ton cas c'est plausible.
Renfield
Admin CodeS-SourceS- MVP Visual Basic
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 27 mars 2007 à 11:29
Oui, je sais que je suis dans VB.NET et VB 2005 mais il n'y en a encore qui arrive à se tromper. La dernière fois, j'ai aidé quelqu'un sur un problème de remplacer un texte par un autre dans une textbox donc vu qu'il était dans VB.NET et VB 2005 et je lui sorti un code en VB.NET mais il ne programmait en VB.NET mais en VB6.
Vu que ca m'est arrivé plusieurs fois, je poses la question.
jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012 27 mars 2007 à 13:38
En effet, j'utilise bien vb 2005. Pour mon problème, j'avais déjà essayé le for each, malheureusement ça ne marche pas. J'arrive pourtant à trouver son handle en utilisant l'api FindWindow et le titre de l'application. En utilisant l'api SendMessage de vb6, le programme se ferme bien. Le problème est que je ne sais pas quoi faire avec la variable lParam As Any du parmètre de SendMessage. VB 2005 de reconnait pas un type As Any. Y a-t'il quelque chose que je pourrais faire avec le handle ? Ou bien en changeans le type de paramètre du SendMessage ?
jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012 28 mars 2007 à 03:38
salut, avec le sendMessage, ca me sort cette erreur :
SendMessage' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
voici mon code(simplifié) :
Déclaration du module déclaration : Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Object) As Long 'lParam As integer ne marche pas plus
Public Const WM_CLOSE As Integer = &H10
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Procédure :
Private Sub stopP()
Try
hdl = FindWindow(vbNullString, "Titre")
If hdl > 0 Then
SendMessage(hdl, WM_CLOSE, 0, 0)
Throw New ApplicationException("Fermeture du jeu ...")
Else
Throw New ApplicationException("Handle du jeu non trouvé")
End If
Catch ex As Exception
txtLog.Text += vbCrLf & ex.Message
End Try
End Sub
jnbrunet
Messages postés258Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention13 novembre 2012 28 mars 2007 à 17:25
Salut,
J'ai finalement réussit à trouver le process avec un for each !
Code :
For Each r As Process In Process.GetProcessesByName(nomApplication)
r.Kill()
Next
Une chose que je ne comprends pas, c'est que lorsque j'utilise le handle du r (ma variable process), ca me donne pas le meme handle que par l'api FindWindow. Ensuite, à chaque fois que j'utilise un api du style SendMessage ou bien SetWindowPos, cela me produit toujours un bog :
has unbalanced the stack. This is likely because
the managed PInvoke signature does not match the unmanaged target
signature. Check that the calling convention and parameters of the
PInvoke signature match the target unmanaged signature.