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
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
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!
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 ??
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)...
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
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 ??
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.