在 Delphi 10 Seattle 中,我使用此代码来获取进程的句柄:
uses
Winapi.Windows;
var
hp: THandle;
begin
hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
这适用于所有进程,32 位和 64 位。
不幸的是,它不适用于提升的进程,它会返回0。
那么如何获取提升进程的进程句柄呢?
简单的答案是你不能这样做。系统说不行。当您调用
GetLastError
时,返回的值将为 ERROR_ACCESS_DENIED
。您的进程没有足够的权限来获得 PROCESS_QUERY_INFORMATION
到提升的进程。
如果您在进程提升时拨打
OpenProcess
,您将会成功。
或者,您可能可以使用比
PROCESS_QUERY_INFORMATION
更低的权限。这很难判断,因为我们不知道你想用这个进程句柄做什么。根据您的评论,您将把句柄传递给 GetProcessImageFileName
,这是 记录,需要 PROCESS_QUERY_INFORMATION
或 PROCESS_QUERY_LIMITED_INFORMATION
。