bonsoir Jef , Abel et josé
la procédure ci-dessous boucle sur toutes les taches actives .
le ProcessID s'affiche à l'écran si une fenetre contient le mot "Winamp"
comme je n'ai pas Winamp d'installé , pour les essais j'ai créé un document "bidon" dont le nom contenait le mot Winamp
je ne peux pas faire de tests plus poussés , mais il est peut etre possible de recuperer directement le titre de la fenetre lors de sa creation , pour eviter de boucler sur toutes les taches actives
testé avec Excel2002 et WinXP
Private Declare Function GetWindow Lib "user32" _
(ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" _
Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Sub processID_FenetreSpecifique()
'adapté d'une procedure de Benoit Marchand
Dim CurrWnd As Long, Length As Long, ProcessId As Long
Dim TaskName As String
Dim Parent As Long, hwnd As Long, Valeur As Long
hwnd = FindWindow("Shell_traywnd", vbNullString)
CurrWnd = GetWindow(hwnd, 0)
While CurrWnd <> 0
Length = GetWindowTextLength(CurrWnd)
TaskName = Space$(Length + 1)
Length = GetWindowText(CurrWnd, TaskName, Length + 1)
TaskName = Left$(TaskName, Len(TaskName) - 1)
'verifie si la fenetre testée contient le mot winamp
If InStr(1, TaskName, "Winamp", vbTextCompare) > 0 Then
Valeur = GetWindowThreadProcessId(CurrWnd, ProcessId)
MsgBox "le PID de la fenetre " & TaskName & " est : " & Valeur
Exit Sub
End If
CurrWnd = GetWindow(CurrWnd, 2)
DoEvents
Wend
MsgBox "fenetre non trouvée . "
End Sub
bonne soirée
MichelXld