Numeros de PID / Taches pour les pro...

  • Initiateur de la discussion Initiateur de la discussion Jef
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

Jef

Guest
Salut le forum,

j'aimerais s'avoir s'il est possible de recuperer le numero de PID d'une application ouverte sous windows ?

PID : nombre aleatoire attribuer par windows a une tache.

Merci a ceux ou celles qui pouront m'aider...

Jef
 
Bonjour Jef,

Je ne suis pas pro.
Je me risque donc à une réponse ...

Je suppose que tu veux parler du PID que l'on voit dans le gestionnaire des tâches. C'est à dire l'identificateur de processus.

Je ne suis pas sûr qu'il existe dans VBA un équivalent à GetCurrentProcessId de VB.

Peut être serais-je contredit ?


Abel.
 
Bonjour Jef, Bonjour Abel,

Désolé Abel ceci est une demi-contradiction. J'ai trouvé ça dans l'aide VBA :

Lance un programme exécutable et renvoie une valeur de type Variant (Double) représentant l'identificateur (ID) de la tâche exécutée en cas de succès, ou un zéro en cas d'échec.

Syntaxe

Shell(pathname[,windowstyle])

La syntaxe de la fonction Shell comprend les arguments nommés suivants :

Élément Description
pathname De type Variant (String). Nom du programme à exécuter, ainsi que tous les arguments ou paramètres de ligne de commande ; peut également préciser le répertoire ou dossier et le lecteur.
windowstyle Facultatif. De type Variant (Integer) correspondant au style de la fenêtre dans laquelle le programme est exécuté. En cas d'omission de windowstyle, le programme est activé mais la fenêtre est réduite.


Si tu veux plus d'infos, tape shell dans l'éditeur vba, place le curseur dessus et appuye sur F1.

Pour en revenir à ta question Jef, on peut donc récupérer le PID de la tâche mais seulement si elle a été lancée à partir d'une macro dans Excel. Les tâches lancées directement sous windows ne sont pas vues par Excel. Du moins c'est ce que je comprends.
Par exemple :
MonPID = Shell("C:\Windows\calc.exe", vbNormalFocus) t'ouvre la calculette et récupère son PID dans la variable MonPID. Par contre je ne sais pas si ce PID est le même que celui vu par Windows bien qu'il y ait des chances.

J'espère que cela te sera utile.
Bon après-midi.

José
 
Alors regarde du côté de AppActivate qui permet de "réactiver" une application (De lui donner le focus en tous cas) à l'aide de son nom. Par exemple : AppActivate "Microsoft Word"
Car je suppose que si tu veux envoyer des ordres (des SendKeys sans doute ?), tu sais à quelle application tu dois t'adresser. Autrement le PID de windows ne te dira pas de quelle appli il s'agit. Je me trompe ?

A+

José
 
Ce n'est pas important Jef, regarde ce que dit l'aide :

L'instruction AppActivate rend active l'application ou la fenêtre nommée, mais ne l'agrandit ni ne la réduit. La fenêtre d'application cesse d'être active dès que l'utilisateur exécute une action qui entraîne la fermeture de la fenêtre ou l'activation d'une autre. Utilisez la fonction Shell pour démarrer une application et définir le style de la fenêtre.
Pour rechercher l'application à activer, les chaînes de titre de toutes les applications sont comparées avec celle de l'argument title. Si aucun titre ne correspond exactement à l'argument, une application dont le titre commence par la valeur de l'argument title est activée. Si plusieurs applications ont pour nom l'argument title, l'une d'entre elles est activée arbitrairement.


Donc si "Microsoft Word - Mon document" est ouvert, AppActivate "Microsoft Word" tout court trouvera Word. Evidemment, ne sachant pas ce que tu veux faire exactement, je ne peux pas t'aider plus. Tu peux avoir plusieurs Word ouverts avec plusieurs fichiers. Mais dans ce cas PID ou pas, je ne sais pas comment tu feras. Ou plutôt si, le PID te permettrait de les distinguer. C'est ça ton idée ?

A+

José
 
En fait je veux piloter winamp
dans le gestionnaire des taches il s'appele somplement winamp.exe
mais dans la barre des tache c'est "Numeros.Chanteur.titre - Winamp"

ne pouvant pas connaitre le titre a l'avance je suis coincé...
et AppActivate "Wimamp.exe" ne donne rien...

A+ jef
 
Il me semblait bien avoir vu passer un fil parlant de winamp dernièrement et tu étais dessus je crois. Bon, ici j'ai pas winamp mais je tâcherai de regarder ça ce soir si je trouve une idée.

Mais question bête... Pourquoi ne lances-tu pas winamp à partir d'excel pour avoir son PID ?

A+

José
 
en effet j'avais repondu a un besoin de "piloter" winamp avec excel, mais depuis j'ai ammeliorer ma macro et duppliquer sous word, donc si je le lance depuis word, je ne peu plus le piloter avec excel... et vice versa

de plus pouvoir recuperer le PID d'une appli m'interresse pour un autre projet.

je te remerci quand meme du temps que tu as passé avec moi

A+
jef
 
Bonsoir Jef,

Je ne vois pas bien l'intérêt de piloter une appli (Winamp ou autre) à partir de plusieurs autres (Word + Excel). C'est source de confusion et de conflits entre applis. Mais bon, si tu y tiens, le client est roi après tout. Lol !

Qelques pistes auxquelles je pense, mais dont je ne maîtrise pas la technique :

* Utiliser les variables d'environnement du système (Environ et Environ$, regarde dans l'aide). Mais apparemment dans Excel c'est en lecture seule (A confirmer quand même).
* Utiliser un fichier texte commun qui contiendrait le n° de PID désiré indiqué par l'appli "lanceuse".
* Utiliser les API ? Là, il faudrait un spécialiste, ce que je ne suis pas.
* Peut-être d'autres idées...

En tous cas, bon courage et bonne soirée.

José
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour