gpt4 book ai didi

delphi - 如何从完整文件名开始计算进程?

转载 作者:行者123 更新时间:2023-12-03 12:14:11 29 4
gpt4 key购买 nike

我正在尝试从可执行文件的完整文件名开始获取进程计数。

这是我的代码:

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)

The parameter is incorrect.

异常是从 GetPathFromPID 引发的函数,因为 hProcess <> 0条件失败并且 RaiseLastOSError被执行。

调试我注意到 0 被传递给了 GetPathFromPID用作 PID 参数,但我不明白我的代码有什么问题。

最佳答案

OpenProcess 在您将 PID 设为零时返回 ERROR_INVALID_PARAMETER

但如果您通过 GetPathFromPID 函数将其传递给 OpenProcess 的进程需要提升,您也可能会得到 ERROR_ACCESS_DENIED

使用这个 instated 来确保你传递的过程只有相同的名字。

  while (ContinueLoop) do
begin
if SameText(ExtractFileName(AFullFileName), FProcessEntry32.szExeFile) then
if ((UpperCase(GetPathFromPID(FProcessEntry32.th32ProcessID)) = UpperCase(AFullFileName)))
....
end;

关于delphi - 如何从完整文件名开始计算进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404309/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com