如何把下面的函数转化成delphiBOOL CloseProcess(CString strProcessName)
{
HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof( PROCESSENTRY32 );
BOOL bWork = Process32First(Snapshot, &pe32);
while (bWork)
{
CString strFile = pe32.szExeFile;
if (strFile == strProcessName)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,NULL,pe32.th32ProcessID);
DWORD dwExitCode = 0;
GetExitCodeProcess(hProcess,&dwExitCode);
TerminateProcess(hProcess,dwExitCode);
CloseHandle(hProcess);
break;
}
bWork = Process32Next(Snapshot, &pe32); 
} CloseHandle(Snapshot); return TRUE;
}

解决方案 »

  1.   


    uses
      TlHelp32;
    function CloseProcess(strProcessName: String): Boolean;
    var
      Snapshot, hProcess: THANDLE;
      pe32: PROCESSENTRY32;
      bWork: Boolean;
      strFile: string;
      dwExitCode: DWORD;
    begin
      Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      pe32.dwSize := sizeof( PROCESSENTRY32 );
      bWork := Process32First(Snapshot, pe32);
      while (bWork) do
      begin
        strFile := pe32.szExeFile;
        if (strFile = strProcessName) then
        begin
          hProcess := OpenProcess(PROCESS_ALL_ACCESS,NULL,pe32.th32ProcessID);
          dwExitCode := 0;
          GetExitCodeProcess(hProcess, dwExitCode);
          TerminateProcess(hProcess,dwExitCode);
          CloseHandle(hProcess);
          break;
        end;
        bWork := Process32Next(Snapshot, pe32);
      end;  CloseHandle(Snapshot);
      Result:= TRUE;
    end;
      

  2.   

    lz正解。另外介绍一个超级强而且简单的办法ntsd -c q -pPID可以终结几乎所有的进程。可以用ShellExecute()调用。
      

  3.   

    我是要在inno setup中使用这里面无法识别
    uses
      TlHelp32;也无法识别
    TH32CS_SNAPPROCESS更无法识别
    FProcessEntry32该如何?
      

  4.   

    inno setup 中可调用其它的程序啊!
    你可以VC编写那个程序,
    之后入放在inno Setup安装包中,不过好像只能是安装开始或安装结束的时候运行。已经习惯了C++代码,对DELPHI看不太懂。也没有时间去研究DELPHI程序。
      

  5.   

    其实我要实现的功能很简单,就是看看要安装的这个程序是否已经安装过,是否正在运行,如果安装过就提示卸载,如果正在运行,就关闭这个程序。如果做一个DLL由inno setup调用是不行的,因为这个dll还没有从安装包从释放出来,所以无法加载。各位帮小弟想想办法。
      

  6.   

    Terminate之前打开调试权限,让你杀得更爽。