Rod*_*ddy 4 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)
...
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何在Win2K上实现相同的功能?
有一种'不支持的'功能:ZwQueryInformationProcess():见
http://msdn.microsoft.com/en-us/library/ms687420.aspx
给定句柄,这将为您提供进程ID(以及其他内容).这不能保证适用于未来的Windows版本,因此我建议使用一个帮助函数来测试操作系统版本,然后使用GetProcAddress()为XP及更高版本调用GetProcessId(),并仅为Win2K调用ZwQueryInformationProcess() .
大卫K是对的.请参阅ZwQueryInformationProcess文档中的注释:
[ZwQueryInformationProcess可能会在Windows的未来版本中更改或不可用.应用程序应使用本主题中列出的备用功能.]
这意味着Microsoft可以选择在将来的任何时候删除它,从而破坏您的应用程序.我强烈认为你遵循DavidK的建议并在操作系统上使用不支持GetProcessID的ZwQueryInformationProcess,并在支持它的操作系统上使用GetProcessID(XP SP1及更高版本).
归档时间: |
|
查看次数: |
3740 次 |
最近记录: |