Fermer un programme externe ? [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006
-
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006
-
Bonjour :)
Voilà, étant encore dans le développement de mon utilitaire, j'ai un petit problème pour fermer un programme externe.
En fait en cliquant sur un bouton de mon projet, j'ai une application externe qui se lance, et je souhaiterais qu'en cas de second clic, l'application en question se ferme et se relance.
J'ai bien trouvé diverses solutions pour tuer les processus et fermer des programmes mais ça ne correspondait jamais avec mon cas, j'ai essayé d'intégrer des ligne et de les réadapter à mon projet mais malheureusement à chaque fois y avait un problème. :(
Pourriez vous me venir en aide s'il vous plaît? :)

Merci d'avance ^^

12 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
comme presque toute fonction, tu dois l'appeler avec un paramètre, pas lui attribuer une valeur.





si ton caption est vraiment "TeamSPeak 2", alors remplace-le dans la constante ci-dessous.

sinon voici un exemple. il faut ouvrir notepad avant








Option Explicit

'

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _

(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _

(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'

Private Const WM_CLOSE As Long = &H10

Private Const HTCAPTION As Long = 2&

'

Private Const MON_TITRE As String = "Sans titre - Bloc-notes"

'

'

Private Sub Command1_Click()

Dim lHwnd As Long

lHwnd = FindWindow(vbNullString, MON_TITRE)



If lHwnd = 0 Then

MsgBox "titre non-trouvé!!!"

Else

Call SendMessage(lHwnd, WM_CLOSE, HTCAPTION, ByVal 0&)

End If

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>







PCPT [AFCK]
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
il faut passer par le handle et l'api sendmessage ...avec tout ca tu devrais trouver ...
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Désolé mais ça fait seulement une semaine que j'ai commencé à apprendre le VB, et je dois bien avouer que je suis un peu perdu sur ce coup là lol
Pourrais tu m'expliquer de manière un peu plus précise la démarche à suivre s'il te plaît? :)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
salut,

comment peux-tu authentifier l'appli en question? elle a un caption fixe (genre "Document Sans Titre") ?
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Oui tout à fait elle a un caption fixe :) En fait c'est TeamSpeak 2 pour être plus précis.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
As Long

Private Const WM_CLOSE = &H10

Private Const HTCAPTION = 2
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Merci beaucoup PCPT pour ce code!!! Tu m'ais vraiment d'un très grand secours :) Donc en fait je fais les déclarations ça y a pas de soucis, mais ensuite je dois placer dans mon command1 (par exemple) les lignes :
FindWindowA = TeamSPeak 2
SendMessageA = kill TeamSpeak 2
?

Enfin je vais essayer et pi ça marche pas je me permettrais peut être de venir t'ennuyer de nouveau :)
Merci encore en tout cas et bonne journée!
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Ah bah non ça marche pas...j'ai encore beaucoup de mal avec les Déclarations apparement moi. :(
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Alors je dis merci MONSIEUR PCPT ^^ Cela fonctionne à merveille :-O Je suis vraiment impressionné,déjà par le fait que le code fonctionne merveille, et deuxièmement car tu m'as présenté ça d'une manière vraiment très propre et très complète!
Je n'avais pas du tout réussi à trouver un code tel que celui ci (aussi "simple" et nickel) sur le site :) Merci beaucoup!

Si je veux l'adapter à deux programmes par exemple, donc deux boutons différents, j'ai juste à faire :

Private Const MON_TITRE1 As String = "Sans titre - Bloc-notes"
Private Const MON_TITRE2 As String = "MSN Messenger"

et dans les command bouton :

Private Sub Command1_Click()
Dim lHwnd As Long
lHwnd = FindWindow(vbNullString, MON_TITRE1)
'etc...
Private Sub Command2_Click()
Dim lHwnd As Long
lHwnd = FindWindow(vbNullString, MON_TITRE2)
'etc...

N'est ce pas? :)
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

C'est bon ça marche!!! C'est formidable, cela va m'offrir un paquet de possibilités ^^ Merci encore PCPT!
@ très bientôt en espérant pouvoir aider quelqu'un à mon tour :)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
41
c'est bien çà oui



après, si par exemple tu as 10 programmes, tu peux faire un groupe de
contrôle pour les boutons, les noms des applications dans un tableau,
puis utiliser l'index du bouton pour aller chercher le caption voulu.



bon courage @+



ps : pense au bouton Valider...
Messages postés
19
Date d'inscription
lundi 5 septembre 2005
Statut
Membre
Dernière intervention
13 mars 2006

Merci (de nouveau ^^) pour toutes explications complémentaires qui me seront d'une grande aide pour mes prochaines applications, je prend bien note de tout cela car j'n'ai pas envie de me retrouver comme un idiot devant mon écran quand j'en aurais besoin :D
C'est vraiment sympa de ta part de m'avoir offert autant d'aide :)
@ bientôt et merci ^^