delphi编写搜索进程函数的一个奇怪的现象(已解决)

一个根据进程名得到PID的函数,原先是把进程名直接写在函数里面的

function FindProcessName:THandle;
    ………

     if ansiCompareText(ExtractFileName(lppe.szExefile),'notepad.exe') = 0 then

我把它改成带参数的函数,把进程名作为参数写在函数里了。

function FindProcessName(exeName:string):THandle;

……

     if ansiCompareText(ExtractFileName(lppe.szExefile),exeName) = 0 then

结果函数中的found永远是false,晕倒,百思不得其解

最后抱着试试看的想法,把参数exeName的类型改为pchar,结果成功了。郁闷啊,如果说是pchar和string类型有别,那也不能在还没有运行到if语句的时候就会有差别啊( 如果参数为string类型时, found := process32first(sshandle, lppe);这一句得到的结果就是false了,但参数是在下面的循环中才用到的啊)

可以正确运行的函数是,(本文为delphi7中测试的结果)

function FindProcessName(exeName:pchar):THandle;
var
  lppe: tprocessentry32;
  sshandle: thandle;
  found: boolean;
begin
  result:=0;
  sshandle := createtoolhelp32snapshot(TH32CS_SNAPALL, 0);
  found := process32first(sshandle, lppe);
  while found do
  begin
    if ansiCompareText(ExtractFileName(lppe.szExefile),exeName) = 0 then
    begin
       result:=lppe.th32ProcessID;
       break;
    end;
    found := process32next(sshandle, lppe); {检索下一个进程}
  end;
  CloseHandle(sshandle);
end; 

 

补记:下午再测试时却发觉又出了同样的问题,看来是修改的对象错误了,不关pchar的事。google了不少文章,发现有一篇文章提到:tprocessentry32的dwsize必须要初始化后process32first才可以使用,否则可能出错,于是加上了一句  lppe.dwSize:=sizeof(PROCESSENTRY32); 这次似乎是真的起作用了。现下使用正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值