Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как просмотреть список запушеных приложений? [D7, WinXP]


Multy ©   (2004-09-07 13:35:00) 

Я могу найти нужное приложение по заголовку (H := FindWindow(nil, 'MySite - Microsoft Internet Explorer');)
А вот как просмотреть список всех, причём заголовок может совпадать частично.


DVM   (2004-09-08 12:05:00) [1]


> MetalFan ©   (07.09.04 15:45) [3]

Это список процессов, а похоже автору нужен список приложений, т.е. аналог того списка, что на панели задач.

> Multy  

Поищи, тут где то был пример использования различных EnumFunctions от Игоря Шевченко.


MetalFan   (2004-09-07 15:45:00) [2]

uses
 Psapi, tlhelp32;

procedure CreateWin9xProcessList(List: TstringList);
var
 hSnapShot: THandle;
 ProcInfo: TProcessEntry32;
begin
 if List = nil then Exit;
 hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (hSnapShot <> THandle(-1)) then
 begin
   ProcInfo.dwSize := SizeOf(ProcInfo);
   if (Process32First(hSnapshot, ProcInfo)) then
   begin
     List.Add(ProcInfo.szExeFile);
     while (Process32Next(hSnapShot, ProcInfo)) do
       List.Add(ProcInfo.szExeFile);
   end;
   CloseHandle(hSnapShot);
 end;
end;

procedure CreateWinNTProcessList(List: TstringList);
var
 PIDArray: array [0..1023] of DWORD;
 cb: DWORD;
 I: Integer;
 ProcCount: Integer;
 hMod: HMODULE;
 hProcess: THandle;
 ModuleName: array [0..300] of Char;
begin
 if List = nil then Exit;
 EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
 ProcCount := cb div SizeOf(DWORD);
 for I := 0 to ProcCount - 1 do
 begin
   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
     PROCESS_VM_READ,
     False,
     PIDArray[I]);
   if (hProcess <> 0) then
   begin
     EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
     GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
     List.Add(ModuleName);
     CloseHandle(hProcess);
   end;
 end;
end;

procedure GetProcessList(var List: TstringList);
var
 ovi: TOSVersionInfo;
begin
 if List = nil then Exit;
 ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 GetVersionEx(ovi);
 case ovi.dwPlatformId of
   VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
   VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List);
 end
end;

function EXE_Running(FileName: string; bFullpath: Boolean): Boolean;
var
 i: Integer;
 MyProcList: TstringList;
begin
 MyProcList := TStringList.Create;
 try
   GetProcessList(MyProcList);
   Result := False;
   if MyProcList = nil then Exit;
   for i := 0 to MyProcList.Count - 1 do
   begin
     if not bFullpath then
     begin
       if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then
         Result := True
     end
     else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True;
     if Result then Break;
   end;
 finally
   MyProcList.Free;
 end;
end;

// Example 1: Is a Exe-File running ?
procedure TForm1.Button1Click(Sender: TObject);
begin
 if EXE_Running('Notepad.exe', False) then
   ShowMessage('EXE is running')
 else
   ShowMessage('EXE is not running');
end;

// Example 2: List running Exe-Files
procedure TForm1.Button3Click(Sender: TObject);
var
 i: Integer;
 MyProcList: TstringList;
begin
 MyProcList := TStringList.Create;
 try
   GetProcessList(MyProcList);
   if MyProcList = nil then Exit;
   for i := 0 to MyProcList.Count - 1 do
     ListBox1.Items.Add(MyProcList.Strings[i]);
 finally
   MyProcList.Free;
 end;
end;


Multy   (2004-09-07 13:44:00) [3]

А по подробнее, а то нащёл пример который находит первое приложение, а мне надо просмотреть весь список запущеных приложений.


DVM   (2004-09-07 13:38:00) [4]


> А вот как просмотреть список всех

EnumWindows()


Наверх

Титульная страница Поиск, карта сайта Написать письмо