判断某个进程是否存在

 

 

unit Unit1;

interface

uses
  Windows,TLHelp32, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function FindProcess(AFileName:string):boolean;
var
hSnapshot:THandle;
lppe:TProcessEntry32;
Found:Boolean;

begin
Result:=False;
hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
lppe.dwSize:=SizeOf(TProcessEntry32);
Found:=Process32First(hSnapshot,lppe);
  while Found do
  begin
    if((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName))   or   (UpperCase(lppe.szExeFile   )=UpperCase(AFileName)))   then
    begin
      Result:=True;
    end;
Found:=Process32Next(hSnapshot,lppe);
  end;
end;

 


procedure TForm1.FormCreate(Sender: TObject);
begin
  if FindProcess('Qq.exe')then
    ShowMessage('进程存在')
  else
    ShowMessage('进程不存在');

end;

end.

 

 

 

### PowerBuilder 中检查进程存在性的方法 在 PowerBuilder 中,可以利用 Windows API 函数来实现对特定进程状态的查询。具体来说,通过调用 `OpenProcess` 和 `CloseHandle` 这两个API函数能够完成这一目标[^3]。 下面是一个简单的例子展示如何检测指定名称的进程是否正在运行: ```powershell // 定义必要的外部函数声明 FUNCTION ulong OpenProcess(ulong dwDesiredAccess, boolean bInheritHandle, ulong dwProcessId) LIBRARY "kernel32" FUNCTION boolean CloseHandle(ulong hObject) LIBRARY "kernel32" // 获取所有进程中名为 'notepad.exe' 的实例数量 integer li_count = 0 string ls_process_name = "notepad.exe" long ll_snapshot_handle long ll_process_id struct PROCESSENTRY32 pe32 ll_snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) if (ll_snapshot_handle != INVALID_HANDLE_VALUE) then pe32.dwSize = sizeof(PROCESSENTRY32) if (Process32First(ll_snapshot_handle, ref pe32)) then do while true if Lower(pe32.szExeFile) = Lower(ls_process_name) then li_count++ // 尝试打开该进程句柄以确认其确实存在并可访问 long lh_process = OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pe32.th32ProcessID) if (lh_process > 0) then // 成功获取到了有效的进程句柄... // 关闭不再使用的句柄 CloseHandle(lh_process) end if endif break if not Process32Next(ll_snapshot_handle, ref pe32) loop // 清理资源 CloseHandle(ll_snapshot_handle) end if end if messagebox("Result", string(li_count)+" instance(s) of "+ls_process_name+" found.") ``` 这段代码首先定义了用于操作系统的外接库函数声明;接着创建了一个快照对象遍历当前系统上的所有活动进程;对于每一个匹配给定名字(这里是记事本程序)的过程条目,尝试获得对应的进程句柄来进行验证。最后统计符合条件的结果数目并通过消息框显示出来。 需要注意的是上述示例中涉及的一些常量如 `INVALID_HANDLE_VALUE`, `TH32CS_SNAPPROCESS`, `PROCESSENTRY32` 结构体以及 `CreateToolhelp32Snapshot()`, `Process32First()` 和 `Process32Next()` 都属于 Win32 API 范畴,在实际应用时可能需要额外导入相应的头文件或者使用更高级别的封装类来简化这些底层细节处理过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值