Obtenir toute la liste des processus en cours d'exécution ( Visual C++ )
Je suis actuellement en utilisant le EnumProcesses fonction pour obtenir une liste des processus en cours d'exécution. Depuis mon application s'exécute dans l'espace utilisateur, cependant, il n'est pas en mesure d'obtenir des poignées pour les processus pas en cours d'exécution en vertu de l'utilisateur, y compris les processus du Système. Est-il une autre méthode qui va me donner l'accès à ceux-ci? Tout ce que je besoin sont les noms de processus.
OriginalL'auteur xeon | 2010-08-13
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé une solution (chiffres après la publication ici comme ma dernière tentative désespérée). Si quelqu'un d'autre seulement besoin d'une liste de noms de processus en cours d'exécution sur le système (tous les processus), cela va le faire pour vous.
Processus De La Marche
OriginalL'auteur xeon
Juste pour ajouter à cette réponse, j'ai construit ce pour les cas où vous êtes à la recherche pour juste un particulier de processus au lieu de l'ensemble de la liste.
Je note ici ce qui était écrit dans Embarcadero RAD Studio (C++ Builder) et par @Remy_Lebeau Système: AnsiString est un C++Builder classe string pour 8bit de caractères ANSI données dans son VCL/FMX cadres.
Merci, je note ici ce qui était écrit dans Embarcadero RAD Studio (C++ Builder) et par @Remy_Lebeau Système: AnsiString est un C++Builder classe string pour 8bit de caractères ANSI données dans son VCL/FMX cadres.
Certainement vaut la peine d'ajouter que les détails de votre réponse! Des acclamations.
Bon point, merci encore.
J'ai une question à propos de ce code. Il semble que la poignée est créé par CreateToolhelp32Snapshot mais vous êtes de clôture avec CloseHandle seulement si un processus a été trouvé avec process32first une seule. N'est-il pas une erreur? Ne devrait-elle pas être fermé tout le temps, sauf si elle ne retourne un descripteur valide?
OriginalL'auteur Phil
Si tous vous avez besoin est juste des noms de processus, puis utilisez WTSEnumerateProcesses en tant que tel:
L'avantage de l'utilisation de cette méthode est que vous n'avez pas à ouvrir chaque processus individuellement et ensuite récupérer son nom de ce que vous avez à faire si vous êtes allé avec EnumProcesses au lieu de cela, aussi, qui ne fonctionneront pas si vous essayez d'ouvrir les processus qui s'exécutent avec des privilèges plus élevés que votre compte d'utilisateur.
De plus, cette méthode est aussi beaucoup plus rapide que d'appeler
Process32First()
/Process32Next()
dans une boucle.WTSEnumerateProcesses
est moins connue de l'API qui a été disponible depuis Windows XP.OriginalL'auteur ahmd0
Une requête WMI (tout à fait possible à l'aide de WMI de l'interface COM, mais vous aurez besoin de traduire VB(Script) ciblage de la documentation) peut aider à ici. Le
Win32_Process
classe contient ce dont vous avez besoin.Cependant, je n'ai pas testé, je pense que vous trouverez la même question: un non-administrateur ne peut voir de leurs propres processus.
OriginalL'auteur Richard