![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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. |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
Salut a tous
Si on lance un programme avec le shell on obtient en effet un PID qui est le meme que celui de windows. ce n'est malheureusement pas ce que je cherche ... snif... merci quand meme a vous deux... Jef |
|
|
#8 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#10 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#11 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#12 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#13 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#14 (permalink) |
|
Guest
Messages: n/a
|
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é |
|
|
#15 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |
| Liens sociaux |
| Outils de la discussion | |
|
|