Comment vérifier si un programme externe est ouvert ?? [Résolu]

Signaler
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006
-
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
-
Bonjour,
Je voudrais savoir si il est possible de vérifier si un programme est ouvert (style VB6.exe, ou winword.exe ...)
Merci beaucoup.

17 réponses

Messages postés
144
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
17 juin 2006

les déclarations "public declare function machin truc" sont dans un module, le reste du code dans une procédure.

Public Declare Function RecupHandleBureau Lib "user32" Alias "GetDesktopWindow" () As Long
Public Declare Function NextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

sub LookProg
Dim hwnd As Long
Dim TitreFenetre As String * 255
Dim Titre As String
Dim r as Long

' recupère toutes les sessions ouvertes
hwnd = NextWindow(RecupHandleBureau(), 5)

Do While hwnd <> 0
TitreFenetre = String(255, 0)
r = GetWindowText(hwnd, TitreFenetre, 255)
If TitreFenetre <> String(255, 0) Then
Titre = TitreFenetre
Titre = Left(Titre, r)
If Titre = nom_programme_recherche Then
msgbox "Le programme est déjà ouvert"
End If
End If
hwnd = NextWindow(hwnd, 2)
Loop
end sub

-- stabe --
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
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
EnumProcess(), exemple fourni dans MSDN.

ciao...
BruNews, MVP VC++
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Je vais voir ce que je peut faire evec ça. Merci beaucoup !
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Salut, le plus simple a mon avi est de lister tous les processus qui
tournent sur la machine et ainsi il sera possible de vérifier si oui ou
non le programme recherché est dans la liste.

Pour cela, il faut utiliser WMI et la classe Win32_Process



Voici le code pour lister les processus (vb.net)



Dim strComputer = "."

Dim liste as string=""

Dim objWMIService = GetObject("winmgmts:" _

& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")

Dim colServices = objWMIService.ExecQuery _

("Select * from Win32_Process'")



For Each objService in colServices

liste +=objService.Name & vbcr

Next

msgbox(liste)
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Est-ce que tu pourrais me donner un exemple pour mon code, parce que je suis débutant et je n'ai pas trouvé grand chose dans msdn. Merci
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Ah merci, j'avais pas actualisé la page donc ton cod en'y été pas. Merci, je teste !
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Désolé mais je n'utilise pas le VB.net, as-tu le code en vb simplement ??
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Il est facilement adaptable sur vb6 ce code !!!! d'ailleur il doit marcher direct non ?

Sinon pour te faire une idée des possibilité WMI tu peux télécharger
script center de microsoft, tu y trouvera ton bonheur!Mais essaye
d'abord ce code sur vb6!
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

J'ai essayé de l'insérer, le code est entièrement rouge, et il me dit "erreur de syntaxe". Il y a surement quelquechose à faire mais je ne sais pas quoi ??
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
doit y avoir une référence à mettre sur WMI.

ciao...
BruNews, MVP VC++
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Ahh oui dézolé,

imports system.management
Messages postés
195
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
13 juillet 2006
3
Correction, toi tu n'ais pas sur .Net donc sous vb6 je crois qu'il faut
ajouter une référence microsoft wmi library dans ton projet
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

C'est déjà fait et ca ne marche pas. Bon j'avais une autre solution :
mon prog est fait en deux exe. Le 1er exe ecrit une valeur dans le registre differente toutes les secondes (ca c'est ok) et mon deuxieme programme récupère les données. Si la clé ne change pas pendant plus de 2 ou 3 secondes alors le programme n'est plus actif. Ca c'est ma deuxeme solution. Mais mon pb, c'est que je ne sait pas comment faire ceci (seulement la 2eme partie)...
Messages postés
144
Date d'inscription
lundi 23 décembre 2002
Statut
Membre
Dernière intervention
17 juin 2006

Bonjour,

Moi sous VB6, j'utilise le code suivant :

Public Declare Function RecupHandleBureau Lib "user32" Alias "GetDesktopWindow" () As Long
Public Declare Function NextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Dim hwnd As Long
Dim TitreFenetre As String * 255
Dim Titre As String

' recupère toutes les sessions ouvertes
hwnd = NextWindow(RecupHandleBureau(), 5)

Do While hwnd <> 0
TitreFenetre = String(255, 0)
r = GetWindowText(hwnd, TitreFenetre, 255)
If TitreFenetre <> String(255, 0) Then
Titre = TitreFenetre
Titre = Left(Titre, r)
If Titre = nom_programme_recherche Then
msgbox "Le programme est déjà ouvert"
End If
End If
hwnd = NextWindow(hwnd, 2)
Loop



-- stabe --
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Il faut déclarer quelquechose avec ce code ?? Moi il me met "Incorrect à l'exterieur d'une procédure" et il me surligne "RecupHandleBureau". Que dois-je faire ??
Messages postés
39
Date d'inscription
vendredi 2 avril 2004
Statut
Membre
Dernière intervention
17 juillet 2006

Merci beaucoup !! Merci beaucoup !! Ca marche bien !!
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
Dsl j'arrive un peu tard mais petite remarque :

Si ton programme a un titre (le titre de la fenetre) très classique, ou
qui peut etre similaire à un autre logiciel (par exemple si c'est un
logiciel comme bloc notes et que les titres des fenetres sont pareils
entre bloc notes et ton prog : exemple à la con lol) il peut y avoir
confusion.

Le mieux pour faire simple c'est de rajouter un petit "-" au début et à
la fin du titre de ta fenetre par exemple pour etre certain que y'aura
pas confusion avec un autre prog.

T'a réussi à me comprendre lol ?

Ciaò
MadMatt
http://matthieu.napoli.neuf.fr/wintools.html