Найди в нете такую хелпу как Kuliba. Там точно было. Способ еще зависит от того имеет ли др. приложение окно иил нет.
Вот из кулибы. " Получение списка запущеных приложений
Igor Nikolaev aKa The Sprite предлагает следующий код:
--------------------------------------------------------------------------------
| Код | procedure TForm1.Button1Click(Sender: TObject); VAR Wnd : hWnd; buff: ARRAY [0..127] OF Char; begin ListBox1.Clear; Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN {Hе показываем:} IF (Wnd <> Application.Handle) AND {-Собственное окно} IsWindowVisible(Wnd) AND {-Hевидимые окна} (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна} (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) THEN BEGIN GetWindowText(Wnd, buff, sizeof(buff)); ListBox1.Items.Add(StrPas(buff)); END; Wnd := GetWindow(Wnd, gw_hWndNext); END; ListBox1.ItemIndex := 0; end; "
Еще оттуда же. " Как получить хэндлы всех пpоцессов, котоpые запущены на данный момент в системе?
Nomadic отвечает: Под Windows 95 это возможно с использованием вспомогательных инфоpмационных функций (tool help functions).
Для получения списка пpоцессов надо делать следующее:
Cпеpва вызывается фукция -------------------------------------------------------------------------------- hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) // - получение снимка состояния системы
Process32First() - получене инфоpмации о пеpвом пpоцессе в списке
Далее в цикле Process32Next() - получение инфоpмации о следующем пpоцессе в списке Пример: >== Режем pаз ==>
-------------------------------------------------------------------------------- unit KernlUtl;
interface uses TlHelp32, Windows, Classes, Sysutils;
procedure GetProcessList(List: TStrings); procedure GetModuleList(List: TStrings); function GetProcessHandle(ProcessID: DWORD): THandle; procedure GetParentProcessInfo(var ID: DWORD; var Path: String);
const
PROCESS_TERMINATE = $0001; PROCESS_CREATE_THREAD = $0002; PROCESS_VM_OPERATION = $0008; PROCESS_VM_READ = $0010; PROCESS_VM_WRITE = $0020; PROCESS_DUP_HANDLE = $0040; PROCESS_CREATE_PROCESS = $0080; PROCESS_SET_QUOTA = $0100; PROCESS_SET_INFORMATION = $0200; PROCESS_QUERY_INFORMATION = $0400; PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $0FFF;
implementation
procedure GetProcessList(List: TStrings); var
I: Integer; hSnapshoot: THandle; pe32: TProcessEntry32; begin
List.Clear; hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then Exit; pe32.dwSize := SizeOf(TProcessEntry32); if (Process32First(hSnapshoot, pe32)) then repeat I := List.Add(Format('%x, %x: %s', [pe32.th32ProcessID, pe32.th32ParentProcessID, pe32.szExeFile])); List.Objects[I] := Pointer(pe32.th32ProcessID); until not Process32Next(hSnapshoot, pe32);
CloseHandle (hSnapshoot); end;
procedure GetModuleList(List: TStrings); var
I: Integer; hSnapshoot: THandle; me32: TModuleEntry32; begin
List.Clear; hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0); if (hSnapshoot = -1) then Exit; me32.dwSize := SizeOf(TModuleEntry32); if (Module32First(hSnapshoot, me32)) then repeat I := List.Add(me32.szModule); List.Objects[I] := Pointer(me32.th32ModuleID); until not Module32Next(hSnapshoot, me32);
CloseHandle (hSnapshoot); end;
procedure GetParentProcessInfo(var ID: DWORD; var Path: String); var
ProcessID: DWORD; hSnapshoot: THandle; pe32: TProcessEntry32; begin
ProcessID := GetCurrentProcessID; ID := -1; Path := '';
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then Exit;
pe32.dwSize := SizeOf(TProcessEntry32); if (Process32First(hSnapshoot, pe32)) then repeat if pe32.th32ProcessID = ProcessID then begin ID := pe32.th32ParentProcessID; Break; end; until not Process32Next(hSnapshoot, pe32);
if ID <> -1 then begin if (Process32First(hSnapshoot, pe32)) then repeat if pe32.th32ProcessID = ID then begin Path := pe32.szExeFile; Break; end; until not Process32Next(hSnapshoot, pe32); end; CloseHandle (hSnapshoot); end;
function GetProcessHandle(ProcessID: DWORD): THandle; begin
Result := OpenProcess(PROCESS_ALL_ACCESS, True, ProcessID); end;
end.
|
"
P.S. седовательно надо это понимать так, что процесс иприложение не одно и то же. |