HI !! ALL
 能否通过一个可执行文件的完整路径...来判断...........该程序是否为启动状态................ 比如: d:\qq\qq.exe       能否通过这个可执文件的路径来判断..是否启动状态.............. 主要是要根据了这个  路径  哦, 并不是查找一下进程..看看有没有就可以了..............
 只知道现在有一个可以从进程.获取...可执行文件的 完整路径....一个 函数................
 不过同名进程获取路径不是很好.....Thanks 
  

解决方案 »

  1.   

    枚举进程再
    GetModuleFileNameEx
    可以从进程.获取...可执行文件的   完整路径
    比如:   d:\qq\qq.exe               
      

  2.   

    同意二楼用CreateToolhelp32Snapshot、Process32First、Process32Next枚举所有进程
    对每个进程用OpenProcess、GetModuleFileName得到进程的文件名
    剩下就是你自己去比较文件名了老有人问这问题,自己去搜搜代码,多的是
      

  3.   

    早搜过了代码。看了都没用。。呵呵。网上代码都是从进程先开始查找。然后取得路径的
    如果是。同名进程的时候。就会判断出多个路径。同名进程是可以解决。但是太麻烦了现在就是想解决简单一些的。。
    就是如何定义一个EXE的路径后。。取得进程。。如果是其它同名的进程就全部杀掉。。
    问题怪了一些。没事。只是拿出讨论一下。要是解决不了。。的话就算了。。因为我自己想了一晚。有新的判断方法了。
      

  4.   

    这个可以判断路径的啊... 根据EXEFILENAME判断  IF UEXEPATH<>"XXXXXX" THEN BEGIN   TEMINATE(XXX)
       KILLFILE(UEXEPATH);
    END;思路就这样了  如果在XP等系统下,需要转化路径的... 是什么来着的,我LOOK LOOK贴上来给你参考一下  while found do
      begin
        itm:=lvw_prc.Items.Add;
          prchand := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_vm_read,
            true, lppe.th32ProcessID);     //查询方式打开进程
          modhand := lppe.th32ModuleID;
          if GetModuleFilenameex(prchand, modhand, modName, sizeof(modName)) > 0 then ;
          //他妈的,偶偏要用PROCESS32FIRST,还非要你用长文件名
          itm.Caption := modName;
          if length(Trim(modName))<4 then
          begin
            itm.Caption := lppe.szExeFile;
          end;LOOK
      

  5.   

    获得进程完整路径根本就是容易事情~查询模块信息即可
    Module32First
      

  6.   

    应该行的,查一下API方面的资料吧。
      

  7.   

    我发个一个关闭 进程的函数你参考下
    uses ....., Tlhelp32;..........function KillTask(ExeFileName:string):boolean;
    const
      PROCESS_TERMINATE = $0001;
    var
      ContinueLoop: BOOLean;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      Result := False;
      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)) = 0;
          ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
      CloseHandle(FSnapshotHandle);
    end;
    你改一点点就可以了直接用拉..