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

法布里佐

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

这是我的代码:

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功能已从此处获取(Andreas Rejbrand的答案)。

运行该应用程序时,出现EOSError异常(“系统错误。代码:87。”)。文档所述

ERROR_INVALID_PARAMETER

87(0x57)

参数错误。

条件引发异常GetPathFromPID,因为hProcess <> 0条件失败并被RaiseLastOSError执行。

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

重复直到

OpenProcessERROR_INVALID_PARAMETER当您给它的PID为零时,返回

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

使用此实例,以确保您通过的进程仅具有相同的名称。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取Linux中正在运行的进程的完整可执行文件名

来自分类Dev

如何计算文件名的校验和?

来自分类Dev

猜测完整的文件名

来自分类Dev

如何使用grep匹配不完整的文件名

来自分类Dev

如何获取当前正在运行的进程的文件名?

来自分类Dev

如何使csplit开始输出文件名从001开始的文件?

来自分类Dev

opendir无法读取完整的文件名

来自分类Dev

完整的特定文件名和目录

来自分类Dev

如何使用批处理仅从输入路径中过滤完整文件名或完整文件夹名?

来自分类Dev

如何从完整路径中提取不带扩展名的文件名?

来自分类Dev

如何从完整的文件名列表中删除文件扩展名?

来自分类Dev

如何在Eclipse(Luna)中快速复制当前的编辑文件名或完整文件路径?

来自分类Dev

如何获取在Java程序中打开的完整文件名和文件路径?

来自分类Dev

如何在Mac OSX终端中显示文件的完整路径,包括完整文件名?

来自分类Dev

如何从完整文件路径中删除除文件名(无扩展名)以外的所有文件?

来自分类Dev

从进程的 PID 中查找进程的文件名?

来自分类Dev

如何使用scandir使用PHP获取文件名及其完整路径

来自分类Dev

如何正确地将完整文件名传递给`cmd / c`?

来自分类Dev

如何在Lubuntu桌面上查看完整的文件名?

来自分类Dev

如何补偿文件名中不完整的日期/时间信息

来自分类Dev

如何猜测完整的文件名,只有前2个字母

来自分类Dev

如何在不指定完整文件名的情况下使用jquery删除CSS

来自分类Dev

如何在OpenFileDialog中显示完整路径和文件名

来自分类Dev

如何像Vim的ctrlp插件一样模糊bash中的完整文件名?

来自分类Dev

如何在Lubuntu桌面上查看完整的文件名?

来自分类Dev

如何在Python中从具有完整路径的变量中获取文件名?

来自分类Dev

如何在ANTLR4错误侦听器中获取完整的合格文件名

来自分类Dev

正则表达式:如何获取带有特殊字符的完整文件名

来自分类Dev

从完整文件路径中提取文件名

Related 相关文章

  1. 1

    如何获取Linux中正在运行的进程的完整可执行文件名

  2. 2

    如何计算文件名的校验和?

  3. 3

    猜测完整的文件名

  4. 4

    如何使用grep匹配不完整的文件名

  5. 5

    如何获取当前正在运行的进程的文件名?

  6. 6

    如何使csplit开始输出文件名从001开始的文件?

  7. 7

    opendir无法读取完整的文件名

  8. 8

    完整的特定文件名和目录

  9. 9

    如何使用批处理仅从输入路径中过滤完整文件名或完整文件夹名?

  10. 10

    如何从完整路径中提取不带扩展名的文件名?

  11. 11

    如何从完整的文件名列表中删除文件扩展名?

  12. 12

    如何在Eclipse(Luna)中快速复制当前的编辑文件名或完整文件路径?

  13. 13

    如何获取在Java程序中打开的完整文件名和文件路径?

  14. 14

    如何在Mac OSX终端中显示文件的完整路径,包括完整文件名?

  15. 15

    如何从完整文件路径中删除除文件名(无扩展名)以外的所有文件?

  16. 16

    从进程的 PID 中查找进程的文件名?

  17. 17

    如何使用scandir使用PHP获取文件名及其完整路径

  18. 18

    如何正确地将完整文件名传递给`cmd / c`?

  19. 19

    如何在Lubuntu桌面上查看完整的文件名?

  20. 20

    如何补偿文件名中不完整的日期/时间信息

  21. 21

    如何猜测完整的文件名,只有前2个字母

  22. 22

    如何在不指定完整文件名的情况下使用jquery删除CSS

  23. 23

    如何在OpenFileDialog中显示完整路径和文件名

  24. 24

    如何像Vim的ctrlp插件一样模糊bash中的完整文件名?

  25. 25

    如何在Lubuntu桌面上查看完整的文件名?

  26. 26

    如何在Python中从具有完整路径的变量中获取文件名?

  27. 27

    如何在ANTLR4错误侦听器中获取完整的合格文件名

  28. 28

    正则表达式:如何获取带有特殊字符的完整文件名

  29. 29

    从完整文件路径中提取文件名

热门标签

归档