我最近发现一个问题,也不知是不是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系统下无法关闭进程所以我就很奇怪了,代码都是一样的,只是位置不同就出问题了!!谁能解释下呢