delphi Process进程控制

unit Process;

interface

uses
  Windows,
  SysUtils,Generics.Collections;

type
  IProcess = interface
  ['{6F9391CA-3C18-40CE-BA91-BEDA3B405F45}']
    function GetProcessHandle(): THandle;
    function GetThreadHandle(): THandle;
    function GetProcessId(): Cardinal;
    function GetThreadId(): Cardinal;

    function WaitForInputIdle(milliseconds: Cardinal): Cardinal;
    function WaitForExit(milliseconds: Cardinal): Cardinal;

    property ProcessHandle: THandle  read GetProcessHandle;
    property ThreadHandle:  THandle  read GetThreadHandle;
    property ProcessId:     Cardinal read GetProcessId;
    property ThreadId:      Cardinal read GetThreadId;
  end;

  IProcessBuilder = interface;

  IStartUpInfoBuilder = interface
  ['{296CD1A4-05E6-4B27-BD48-7DC29865AD3C}']
    function Flags(flags: Cardinal): IStartUpInfoBuilder;
    function ShowWindow(showWindow: Word): IStartUpInfoBuilder;

    function Build(): IProcessBuilder;
  end;

  ICommandLineArgsBuilder = interface
  ['{A777E7A0-818C-4AD8-A728-13A41778D57B}']
    function Arg(name: string; value: string = ''): ICommandLineArgsBuilder;
    function Build(): IProcessBuilder;
  end;

  IProcessBuilder = interface
  ['{B3983F67-486B-41FB-9761-452C3CB763CF}']
    function Name(name: string): IProcessBuilder;
    function CommandLineArgs(): ICommandLineArgsBuilder;
    function InheritHandles(inheritHandles: boolean): IProcessBuilder;
    function Flags(flags: Cardinal): IProcessBuilder;
    function Directory(directory: string): IProcessBuilder;
    function StartInfo(): IStartUpInfoBuilder;

    function TryStart(out process: IProcess): boolean;
  end;

  TProcess = class(TInterfacedObject, IProcess)
  strict private
    fProcessHandle: THandle;
    fThreadHandle: THandle;
    fProcessId: Cardinal;
    fThreadId: Cardinal;

    fAutoCloseHandles: boolean;
  protected
    function GetProcessHandle(): THandle;
    function GetThreadHandle(): THandle;
    function GetProcessId(): Cardinal;
    function GetThreadId(): Cardinal;

    function WaitForInputIdle(milliseconds:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi中获取进程的CPU和内存信息,可以使用Windows API函数来实现。以下是一种实现方式: 首先,需要在Delphi代码中引入Windows单元,以便使用相关API函数。可以在代码的unit部分添加"Windows"。 获取进程的CPU信息,可以使用GetProcessTimes函数。该函数返回的是一个FILETIME结构体,包含了进程的用户模式和内核模式执行时间。可以通过计算时间差来获取CPU使用率。具体步骤如下: 1. 使用OpenProcess函数打开进程句柄。该函数需要传入进程的ID和访问权限(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ)。 2. 调用GetProcessTimes函数,传入进程句柄和用于保存CPU信息的FILETIME结构体。 3. 等待一段时间,然后再次调用GetProcessTimes函数,传入相同的进程句柄和FILETIME结构体。 4. 计算两次获取的FILETIME结构体的时间差,即为进程的CPU使用时间。 获取进程的内存信息,可以使用GetProcessMemoryInfo函数。该函数返回的是一个PROCESS_MEMORY_COUNTERS_EX结构体,包含了进程的内存使用情况。具体步骤如下: 1. 使用OpenProcess函数打开进程句柄。该函数需要传入进程的ID和访问权限(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ)。 2. 调用GetProcessMemoryInfo函数,传入进程句柄和用于保存内存信息的PROCESS_MEMORY_COUNTERS_EX结构体。 3. 可以从返回的结构体中获取进程的实际物理内存使用量。 需要注意的是,获取进程的CPU和内存信息需要适当的时间间隔来获取准确的数据。另外,还需要做好错误处理,确保API函数的调用成功。 以上是一种简单的实现方式,在实际使用中还可以根据需求进行更加详细的处理和展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值