想在程序中取得当前路径,该如何作?
我想编个程序监控机器上运行的应用程序?该怎么办?
比方:
    运行一个word,我就把 word.path\word.exe 运行时间等记录下来
    运行一个OICQ,我就把 OICQ.path\OICQ.exe 运行时间等记录下来
    ...我用GetCurrentDir..()每次去出来的路径都是时应用程序自身所在的路径。
希望用DELPHI5.0-6.0的代码?    我是菜鸟,大虾,多指教!!!

解决方案 »

  1.   

    试试这个函数行吗
    function Getpath: string;
    var
      path              : string;
      i                 : integer;
    begin
      path := application.ExeName;
      for i := length(path) - 1 downto 0 do
      begin
        if pchar(path)[i] = '\' then
          break;
      end;
      result := copy(path, 1, i);end;
      

  2.   

    谢谢siyu2002的回答,只是application.ExeName;是取自身应用程序的名字,您写的Getpath的路径,我的目的正好相反:
    请看例子::
      
       具个例子:(设可执行程序monitor.exe(用的delphi写))
       step1 : 运行D:\monitor.exe
       step2 :运行C:\Word.exe
       step3 :monitor.exe取得(如何取得?)"C:\word.exe"字符串写入log文件(假设为monitor.Log)。
       ...
       ...
       现在是monitor如何知道某个程序将要/正在被操作系统执行??(见step3:),monitor中如何解决这个问题??
       请继续回答...
       
      

  3.   

    根据进程processid得到该进程的可执行文件名uses tlhelp32; 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    pe:PROCESSENTRY32; 
    me:MODULEENTRY32; 
    hp,hm:Thandle; 
    b,b1:boolean; 
    begin 
    hp:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); 
    pe.dwSize:=SizeOf(pe); 
    b:=Process32First(hp,pe); 
    while b do 
    begin 
    hm:=CreateToolHelp32SnapShot(TH32CS_SNAPModule,pe.th32ProcessID); 
    me.dwSize:=sizeof(ModuleEntry32); 
    if Module32First(hm,me) then 
    begin 
    b1:=Module32First(hm,me); 
    while b1 do 
    begin 
    if me.th32ModuleID=pe.th32ModuleID then 
    listbox1.Items.Add(me.szExePath); 
    b1:=Module32Next(hm,me); 
    end; 
    end; 
    b:=Process32Next(hp,pe); 
    end; end; 而在NT系统中由于不支持toolhelp api,故 
    #include "psapi.hpp" 假使process id是 pid 的话: HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pid); 
    if( NULL != hProcess ) 

    HMODULE hMod; 
    DWORD cbNeeded; 
    if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) ) 

    char buf[MAX_PATH+1]=""; 
    if(GetModuleBaseName( hProcess, hMod,buf,sizeof buf)>0) 
    // 
    // buf放的就是名字 
    // 

    CloseHandle(hProcess); 

    (注意该程序运行需要psapi.dll,所以要copy到别的机器上运行时需连同该文件一起拷贝。当然如果装了delphi或者c++ builder就不需要了)转-富翁论坛
    上面的文章可以让你如何根据一个PROCESSID去得到它的文件名,你也就不用这么辛苦的去做其它的事了