Comment vérifier si un programme externe est ouvert ??

Résolu
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006 - 5 août 2005 à 10:45
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 5 août 2005 à 23:36
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

stabe Messages postés 144 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 17 juin 2006
5 août 2005 à 15:40
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2005 à 10:57
EnumProcess(), exemple fourni dans MSDN.

ciao...
BruNews, MVP VC++
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 10:58
Je vais voir ce que je peut faire evec ça. Merci beaucoup !
0
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
5 août 2005 à 11:01
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 11:06
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
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 11:07
Ah merci, j'avais pas actualisé la page donc ton cod en'y été pas. Merci, je teste !
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 11:09
Désolé mais je n'utilise pas le VB.net, as-tu le code en vb simplement ??
0
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
5 août 2005 à 11:30
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!
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 11:35
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 ??
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2005 à 11:36
doit y avoir une référence à mettre sur WMI.

ciao...
BruNews, MVP VC++
0
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
5 août 2005 à 11:40
Ahh oui dézolé,

imports system.management
0
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
5 août 2005 à 11:48
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
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 12:08
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)...
0
stabe Messages postés 144 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 17 juin 2006
5 août 2005 à 15:25
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 --
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 15:36
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 ??
0
AlexPoulard Messages postés 39 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 17 juillet 2006
5 août 2005 à 16:24
Merci beaucoup !! Merci beaucoup !! Ca marche bien !!
0
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 août 2005 à 23:36
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
0
Rejoignez-nous