我最近发现一个问题,也不知是不是delphi的BUG,代码在98系统不执行的问题,看看下面的代码你不用关心代码实现什么功能,我只是用代码表达个意思Procedure TForm1.KillProcess(a:string);
var
sHandle:THandle;
Pr:TProcesseNtry32;
bool:boolean;
H:hwnd;
begin
sHandle:=CreateToolHelp32SnapShot(Th32cs_snapall,0);
bool:=Process32First(sHandle,Pr);
While bool do
begin
if uppercase(ExtractFileName(pr.szExeFile)) = uppercase(a) then begin
Memo1.Lines.Add('结束进程:' + a);
H:=OpenProcess(Process_all_access,true,pr.th32ProcessID);
TerminateProcess(h,0);
end;
bool:=Process32Next(sHandle,Pr);
end;
end;这个过程是不变的,主要是这个按钮procedure TForm1.Button1Click(Sender: TObject);
var
dir:array[0..255] of char;
win,sys:string;
begin
GetSystemDirectory(dir,sizeof(dir));
sys:=dir;
if (not FileExists(sys + '\notepad.exe')) then begin
memo;
Memo1.Lines.Add('test');
Exit;
end;
memo;
Memo1.Lines.Add('test');
GetWindowsDirectory(dir,sizeof(dir));
win:=dir;
KillProcess('123.exe');
KillProcess('test.exe');
//下面省略
end;注:memo是memo控件的初始化过程上面的代码在98或NT系统下都可以关闭一个进程,再看这个procedure TForm1.Button1Click(Sender: TObject);
var
dir:array[0..255] of char;
win,sys:string;
begin
memo; //把memo过程移动到代码第1行
GetSystemDirectory(dir,sizeof(dir));
sys:=dir;
if (not FileExists(sys + '\notepad.exe')) then begin
memo;
Memo1.Lines.Add('test');
Exit;
end;
Memo1.Lines.Add('test');
GetWindowsDirectory(dir,sizeof(dir));
win:=dir;
KillProcess('123.exe');
KillProcess('test.exe');
end;这个不同的就是把memo过程移到了代码的第一行,结果就是在98系统下无法关闭进程所以我就很奇怪了,代码都是一样的,只是位置不同就出问题了!!谁能解释下呢
这个api好像是在2000以上才有的~