如何获得运行程序名称,以及窗口的标题,
比如,程序运行后,得到所有正在运行的程序,IE,word,QQ等。

解决方案 »

  1.   

    9X
    procedure GetProcess;
    var
      FProcList:TStringList;
      PE: TProcessEntry32;
      PPE: PProcessEntry32;
    begin
      FProcList:TStringList.Create;
      if FSnap > 0 then CloseHandle(FSnap);
      FSnap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if FSnap = INVALID_HANDLE_VALUE then
        raise Exception.Create('CreateToolHelp32Snapshot failed');
      PE.dwSize := SizeOf(PE);
      if Process32First(FSnap, PE) then               // get process
        repeat
          New(PPE);                                  // create new PPE
          PPE^ := PE;                                // fill it
          FProcList.Add(PPE);                        // add it to list
        until not Process32Next(FSnap, PE);           // get next process
    end;
    2000/NT
    procedure TForm1.FillList;
    var
      FProcList:TStringList;
      i:integer;
      Prochand:THandle;
      Modhand:HModule;
      ModName:array[0..MAX_PATH] of Char;
      Counts:DWORD;
    begin
      FProcList:=TStringList.Create;
      Modhand:=0;
      For i:=low(proarray) to high(proarray) do
      begin
        Prochand:=OpenProcess(PROCESS_QUERY_INFORMATION OR PROCESS_VM_READ,False,proarray[i]);
        if Prochand>0 then begin
           try
             EnumProcessModules(Prochand,@ModHand,1,Counts);
             if GetModuleFileNameEx(Prochand,Modhand,ModName,Sizeof(ModName))>0 then 
               FProcList.Add(ModName);                        
             finally
               CloseHandle(Prochand);
             end;
        end;
    end;