如何将下面的函数改成过程
高手指点
function KillTask(ExeFileName:string):integer;const 
PROCESS_TERMINATE = $0001; 
varContinueLoop: BOOLean; 
FSnapshotHandle: THandle; 
FProcessEntry32: TProcessEntry32; 
begin 
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do 
begin 
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
UpperCase(ExeFileName))) then 
Result := Integer(TerminateProcess( 
OpenProcess(PROCESS_TERMINATE, 
BOOL(0), 
FProcessEntry32.th32ProcessID), 
0)); 
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
end; 
CloseHandle(FSnapshotHandle); 
end; 

解决方案 »

  1.   

    procedure KillTask(ExeFileName:string); 
    const 
    PROCESS_TERMINATE = $0001; 
    var 
    ContinueLoop: BOOLean; 
    FSnapshotHandle: THandle; 
    FProcessEntry32: TProcessEntry32; 
    begin 
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do 
    begin 
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
    UpperCase(ExeFileName))) then 
    TerminateProcess( 
    OpenProcess(PROCESS_TERMINATE, 
    BOOL(0), 
    FProcessEntry32.th32ProcessID), 
    0); 
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
    end; 
    CloseHandle(FSnapshotHandle); 
    end; 
      

  2.   


    procedure KillTask(ExeFileName: string;var ReInt:Integer);
    const
      PROCESS_TERMINATE = $0001;
    var
      ContinueLoop: BOOLean;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      ReInt := 0;
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
      ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);  while Integer(ContinueLoop) <> 0 do
      begin
        if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
          UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
          UpperCase(ExeFileName))) then
          ReInt := Integer(TerminateProcess(
            OpenProcess(PROCESS_TERMINATE,
            BOOL(0),
            FProcessEntry32.th32ProcessID),
            0));
        ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
      CloseHandle(FSnapshotHandle);
    end;
      

  3.   


    procedure KillTask(ExeFileName:string); 
    const 
    PROCESS_TERMINATE = $0001; 
    var 
    ContinueLoop: BOOLean; 
    FSnapshotHandle: THandle; 
    FProcessEntry32: TProcessEntry32; 
    begin 
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do 
    begin 
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
    UpperCase(ExeFileName))) then 
    TerminateProcess( 
    OpenProcess(PROCESS_TERMINATE, 
    BOOL(0), 
    FProcessEntry32.th32ProcessID), 
    0); 
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
    end; 
    CloseHandle(FSnapshotHandle); 
    end;
      

  4.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
     KillTask('qq.exe');
    if KillTask('qq.exe') <> 0 then
    showmessage('结束qq.exe成功')
    else 
    showmessage('无法结束qq.exe');   end;
    改成过程之后
    在if KillTask('qq.exe') <> 0 then 提示不相容的类型
    是怎么回事呢?
      

  5.   


    procedure TForm1.Button2Click(Sender: TObject);
    var
      ReInt:Integer; 
    begin 
    KillTask('qq.exe',ReInt); 
    if ReInt <> 0 then 
      showmessage('结束qq.exe成功') 
    else 
      showmessage('无法结束qq.exe');  end; 
      

  6.   

    是不是因为之前 KILLTASK 函数 有返回结果的缘故呢
      

  7.   

    你用ReInt代替的Result
    IF这里也改一下就OK了
    理解了 3Q
      

  8.   

    还有一个问题没弄懂

    Procedure Test;StdCall;
    Begin
    ..................
    End;我可以使用
    ProcessRing0(Test);  
    一点问题都没有
    但是现在我想
    ProcessRing0(KillTask);
    将函数改成过程的时候我是使用的 失踪的月亮 的方法 (将函数返回的Result 
    去掉)
    procedure KillTask(ExeFileName:string);StdCall;
    结果提示为
    Incompatible types: 'Parameter lists differ'
    这个地方应该怎么解决呢 ???
     
      

  9.   

    procedure KillTask(ExeFileName:string); 
    const 
    PROCESS_TERMINATE = $0001; 
    var 
    ContinueLoop: BOOLean; 
    FSnapshotHandle: THandle; 
    FProcessEntry32: TProcessEntry32; 
    begin 
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do 
    begin 
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
    UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
    UpperCase(ExeFileName))) then 
    TerminateProcess( 
    OpenProcess(PROCESS_TERMINATE, 
    BOOL(0), 
    FProcessEntry32.th32ProcessID), 
    0); 
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
    end; 
    CloseHandle(FSnapshotHandle); 
    end;
    不过有一点不太明白,为什么非要把函数改为过程呢?不是一样的用吗?
      

  10.   

    因为
    ProcessRing0(Test);
    一点没问题都没有我就突然想到
    把KillTask 改成过程 是不是就没问题了呢(当然心理明知道一定还是有问题的)
    因为我只知道 函数和过程的唯一的不一样
    就是返回值
    但没改过
    所以就问了这样的问题
    多知道点还是好的
    呵呵~~~~
    如果不改的话
    ProcessRing0(Test); 这句应该如何改成ProcessRing0(KillTask); 而不出错呢?  
      

  11.   

    Procedure Test;StdCall; 
    procedure KillTask(ExeFileName:string );  StdCall;
    2者的差别就在于(ExeFileName:string )
    ProcessRing0(Test); 没问题
    但是ProcessRing0(KillTask);就有问题
    应该如何改才能OK呢?
    高手指点指点吧
      

  12.   

    该ProcessRing0吧,要是没有ProcessRing0的代码,就让ExeFileName参数以其他方式传入了!