【发布时间】:2016-11-03 14:35:52
【问题描述】:
我正在尝试从可执行的完整文件名开始获取进程计数。
这是我的代码:
function GetPathFromPID(const PID: cardinal): string;
var
hProcess: THandle;
path: array[0..MAX_PATH - 1] of char;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
if hProcess <> 0 then
try
if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then
RaiseLastOSError;
result := path;
finally
CloseHandle(hProcess)
end
else
RaiseLastOSError;
end;
function ProcessCount(const AFullFileName: string): Integer;
var
ContinueLoop: boolean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := 0;
while(ContinueLoop) do
begin
if ((UpperCase(GetPathFromPID(FProcessEntry32.th32ProcessID)) = UpperCase(AFullFileName)))
then Result := Result + 1;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Self.Caption := IntToStr(ProcessCount(Application.ExeName));
end;
GetPathFromPID 函数取自 here(Andreas Rejbrand 的回答)。
运行应用程序,我得到 EOSError 异常('系统错误。代码:87。')。正如documentation 所说:
ERROR_INVALID_PARAMETER
87 (0x57)
参数不正确。
从GetPathFromPID 函数引发异常,因为hProcess <> 0 条件失败并执行RaiseLastOSError。
调试我注意到 0 作为 PID 参数传递给 GetPathFromPID 函数,但我不明白我的代码有什么问题。
【问题讨论】:
标签: delphi