c++ - Windows 2000 的 GetProcessID 的替代方法

标签 c++ windows winapi

我使用 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 上实现相同的功能吗?

最佳答案

有一个“不受支持的”函数:ZwQueryInformationProcess():参见

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

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

关于c++ - Windows 2000 的 GetProcessID 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/272036/

相关文章:

c++ - 使用com端口在cpp中通过串口发送数据

使用 mmap 和空文件的 Python 共享内存

windows - 从 cmd 运行的命令不起作用

Windows批处理文件将空白字段更改为值

c# - Windows 服务 DLL 替换

c++ - 如何在 mshtml 中捕获应用程序崩溃或退出?

c++ - VS2015 C++ : unable to match function definition to an existing declaration

c++ - 从另一个线程最大化/最小化窗口

c++ - AccessibleObjectFromPoint() 返回不正确的对象

c++ - 是否有任何理由不使用异常来测试 std::map 中是否存在元素