2009-07-17 41 views
0

我有一些旧的VB6代码部分,它通过调用CreateToolhelpSnapshot来枚举机器上的运行进程。我试图在Win 2003 R2上运行这些代码,我有理由对它返回的进程列表有点怀疑。我发现this article这导致我认为我可能需要在2003年使用不同的API调用。但是,我找不到他提到的Microsoft知识库文章。或者我无论如何都找不到英文版本。我确实发现the article in German,但我无法读懂德语。我认为它建议我使用名为EnumProcs的API,但在Microsoft API文档中找不到任何此类API(至少不在msdn.microsoft.com上)。如何在Win 2003上枚举VB 6中的进程?

那么,我应该在Win 2003上使用CreateToolhelpSnapshot还是应该使用其他一些API?有没有人知道我可以在哪里找到英文版KB文章的副本?

回答

2

article给出了相当全面的清单,如何做你需要的。它基本上使用EnumProcesses Windows API调用,而不是GetActiveProcesses之一。

请注意,它不仅仅是Windows Server 2003,还包括NT家族的所有Windows版本(XP,Vista等)。

+0

其实它只是NT。 CreateToolhelp32Snapshot已添加到2000年,现在仍在使用中。 http://msdn.microsoft.com/en-us/library/ms682489(VS.85).aspx – MarkJ 2009-07-18 19:18:23

+0

我的意思是,很好的链接,EnumProcesses值得一试,如果CreateToolhelp32Snapshot不能返回想要的结果。但是,根据MSDN文档,CreateToolhelp32Snapshot可以在Windows Server 2003上运行。 – MarkJ 2009-07-18 20:14:34

3
  • 您的免费vbcode.com文章是从bathroom wall of code红鲱鱼。它说CreateToolhelp32Snapshot只适用于Windows 95,98和Me。这只是一次 - 它不在NT中 - 但它在Windows 2000以及所有更高版本中。
  • CreateToolhelp32Snapshot备注部分的MSDN页面显示了呼叫失败的原因。 (它声明它适用于Windows Server 2003:“最低支持的服务器是Windows 2000 Server”,并且API调用尚未停用。)
  • 如果无法使CreateToolhelpSnapshot正常工作,请使用Ant's answer并使用EnumProcesses。有关此方法的更多信息:有关枚举VB6进程的旧Microsoft Knowledge Base article表明您使用EnumProcesses。您将不得不分发PSAPI.DLL,但免费使用Platform SDK。 EnumProcesses上的另一个来源是旧书,但是出色的书籍Hardcore Visual Basic现在可用free online
+0

不知道它还在2000年和以后。很好的发现。 – Ant 2009-07-20 09:15:23