2009-07-17 6 views
0

J'ai une partie ancienne de code VB6 qui énumère les processus en cours sur la machine via un appel à CreateToolhelpSnapshot. Je tente d'exécuter ce code sur Win 2003 R2 et j'ai des raisons d'être un peu méfiant de la liste des processus qu'il retourne. J'ai trouvé this article ce qui m'amène à penser que je devrais utiliser un autre appel d'API sur 2003. Cependant, je ne trouve pas l'article Microsoft KnowledgeBase qu'il mentionne. Ou je ne trouve pas la version anglaise de toute façon. J'ai trouvé the article in German mais je ne peux pas lire l'allemand. Je pense que cela me conseille d'utiliser une API appelée EnumProcs mais je ne trouve pas une telle API dans les documents de l'API Microsoft (du moins pas sur msdn.microsoft.com). Donc, devrais-je utiliser CreateToolhelpSnapshot sur Win 2003 ou y a-t-il d'autres API que je devrais utiliser? Et est-ce que quelqu'un a une idée où je pourrais trouver une copie de cet article de KB en anglais?Comment énumérer des processus à partir de VB 6 sur Win 2003?

Répondre

2

Cette article donne une liste assez complète de comment faire ce dont vous avez besoin. Il utilise essentiellement l'appel de l'API Windows EnumProcesses au lieu de l'appel GetActiveProcesses.

Notez que ce n'est pas seulement Windows Server 2003, mais aussi toutes les versions Windows de la famille NT (XP, Vista, etc.).

+0

En fait, c'est seulement NT. CreateToolhelp32Snapshot a été ajouté à 2000 et il est toujours dans maintenant. http://msdn.microsoft.com/en-us/library/ms682489(VS.85).aspx – MarkJ

+0

Je veux dire, lien sympa, et EnumProcesses vaut la peine d'essayer si CreateToolhelp32Snapshot ne renvoie pas les résultats voulus. Mais CreateToolhelp32Snapshot fonctionne sur Windows Server 2003 en fonction des documents MSDN. – MarkJ

2

Google Translate fait un excellent travail de traduction de cette page allemande KB en anglais: HOW TO: Enumerate Applications Using Win32 APIs.

+0

Vous avez raison; Je suis habitué aux traductions laissant quelque chose à désirer, donc je n'ai même pas pris la peine de l'essayer. –

3
  • Votre article freevbcode.com est un reflet rouge du bathroom wall of code. Il dit que CreateToolhelp32Snapshot ne fonctionne que sur Windows 95, 98 et Me. C'était vrai une fois - ce n'était pas dans NT - mais dans Windows 2000 et toutes les versions ultérieures.
  • La page MSDN sur la section CreateToolhelp32Snapshot remarques suggère des raisons pour lesquelles l'appel peut échouer. (Il indique que cela fonctionne sur Windows Server 2003: «serveur minimum pris en charge est Windows 2000 Server» et l'appel d'API n'a pas été retiré.)
  • Si vous ne pouvez pas obtenir CreateToolhelpSnapshot pour fonctionner, passez à Ant's answer et utilisez EnumProcesses. Plus d'informations sur cette méthode: un ancien Microsoft Knowledge Base article sur l'énumération des processus de VB6 vous suggère d'utiliser EnumProcesses. Vous devrez distribuer PSAPI.DLL, mais il est gratuit avec le Platform SDK. Une autre source sur EnumProcesses est de l'ancien mais excellent livre Hardcore Visual Basic, maintenant disponible free online.
+0

Je ne savais pas qu'il fonctionnait encore avec 2000 et plus. Belle trouvaille. – Ant

Questions connexes