当前位置:  开发笔记 > 编程语言 > 正文

替代Windows 2000的GetProcessID

如何解决《替代Windows2000的GetProcessID》经验,为你挑选了2个好方法。

我使用GetProcessID意外地从应用程序中删除了Win2K兼容性.

我像这样使用它来获取已启动应用程序的主要HWND.

ShellExecuteEx(&info); // Launch application
HANDLE han = info.hProcess; // Get process

cbinfo.han = han;

//Call EnumWindows to enumerate windows....
//with this as the callback

static BOOL CALLBACK enumproc(HWND hwnd, LPARAM lParam)
{
  DWORD id;
  GetWIndowThreadProcessID(hwnd, &id);
  if (id == GetProcessID(cbinfo.han))
    setResult(hwnd)
 ...
}

任何想法如何在Win2K上实现相同的功能?



1> DavidK..:

有一种'不支持的'功能:ZwQueryInformationProcess():见

http://msdn.microsoft.com/en-us/library/ms687420.aspx

给定句柄,这将为您提供进程ID(以及其他内容).这不能保证适用于未来的Windows版本,因此我建议使用一个帮助函数来测试操作系统版本,然后使用GetProcAddress()为XP及更高版本调用GetProcessId(),并仅为Win2K调用ZwQueryInformationProcess() .



2> ReinstateMon..:

大卫K是对的.请参阅ZwQueryInformationProcess文档中的注释:

[ZwQueryInformationProcess可能会在Windows的未来版本中更改或不可用.应用程序应使用本主题中列出的备用功能.]

这意味着Microsoft可以选择在将来的任何时候删除它,从而破坏您的应用程序.我强烈认为你遵循DavidK的建议并在操作系统上使用不支持GetProcessID的ZwQueryInformationProcess,并在支持它的操作系统上使用GetProcessID(XP SP1及更高版本).

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有