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

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

список запущенных приложений [D6, D7, WinXP]


LOX ©   (2003-09-13 13:24:00) 

Как получить список запущенных приложений. Если можно, то с путями к приложения.
У меня XP.


FIREHACK   (2003-09-17 17:33:00) [1]

ЛОВИ НЕ ЖАЛКО!!!



type

TProcessInformation = record
NextOffset: cardinal; // следующий процесс
ThreadCount: cardinal;
unk2, unk3, unk4, unk5, unk6, unk7: cardinal;
CreateTime: TFileTime;
UserTime: TFileTime;
KernelTime: TFileTime;
unk14: cardinal;
pModuleName: PWideChar; //* unicode */
BasePriority: cardinal;
ProcessID: cardinal;
InheritedFromUniqueProcessID: cardinal;
HandleCount: cardinal;
unk20, unk21: cardinal;
PeekVirtualSize: cardinal;
VirtualSize: cardinal;
PageFaultCountPerSec: cardinal;
PeakWorkingSetSize: cardinal;
WorkingSetSize: cardinal;
PeekPagedPoolUsage: cardinal;
PagedPoolUsage: cardinal;
PeekNonPagedPoolUsage: cardinal;
NonPagedPoolUsage: cardinal;
unk31: cardinal; //* PagefileUsage ? */
PeakPagefileUsage: cardinal;
unk33: cardinal; //* PrivateBytes ? */
ThreadInfos: PThreadInformation; // потоки данного процесса
end;

TEnumNtProcessesProc = function (ProcessInformation:TProcessInformation; Param:DWORD):Boolean;stdcall;

function NTDLLEnumProcesses(EnumProc:TEnumNtProcessesProc;Param:DWORD):Boolean;
var
NtQuerySystemInformation: TNtQuerySystemInformation;
i:integer;
proc:PProcessInformation;
p:pointer;
hNTDll:HINST;
begin
Result:=False;
hNTDll:=GetModuleHandle("ntdll.dll");
if hNTDll <32 then exit;
try
@NtQuerySystemInformation:=GetProcAddress(hNTDll, "NtQuerySystemInformation");
if assigned(@NtQuerySystemInformation) then
begin
// GetMem(p, 30000);
p:= GetMemory(100000);
proc:=p;
Result:=NtQuerySystemInformation(5, proc, 40000,i)=0;
while Result do
begin
if not EnumProc(Proc^,Param) then Break;
if proc^.NextOffset=0 then break;
proc:=pointer(cardinal(proc)+proc^.NextOffset);
end;
FreeMemory(p);
end;
finally
end;
end;


Alibaba   (2003-09-17 16:19:00) [2]

>DVM © (15.09.03 16:30) [7]

Этот кусок может быть в библиотеке готовых решений.
На авторство не претендую - в очень многих примерах встречается.

Что не по теме - согласен.
Не внимательно прочитал.


DVM   (2003-09-15 16:42:00) [3]

Еще надо добавить, что в разных версиях Windows получение информации о процессах производится по-разному.
Есть такая известнейшая книга "Delphi 5(6) Руководство разработчика" в 2 томах. Там об этом подробно все расписано.


Songoku   (2003-09-15 16:38:00) [4]

Ах да я кое что забыл.
Делай так EnumProcesses(PSAPI) а потом узновай путь GetModuleFileName функцией.


DVM   (2003-09-15 16:30:00) [5]


> Alibaba © (15.09.03 14:52) [5]

Речь не об окнах. Этот кусок взят из библиотеки готовых решений, но не по теме.

> LOX ©

Здесь это столько раз встречалось, проще поискать по словосочетанию "Получить список процессов" тут или в Яндексе.
Писать подробнее лень.


Songoku   (2003-09-15 16:29:00) [6]

Вы хоть читать умеете???
Он хочет узнать какие приложения(модули) в системе загружыны!!! НЕ ОКНА.
Process32First - ны выдаёт путь к приложения а только названия exe фаила!!!

NTAPI Hook_NtQuerySystemInformation(
LONG type, // тип требуемой информации
PVOID SystemInformation, // указатель на буфер, в который вернется информация
LONG SystemInformationLength, // размер буфера в байтах
PLONG ReturnLength // сколько байт было возвращено или требуется
);
typedef struct {
FILETIME ProcessorTime;
ULONG unk2, unk3;
FILETIME CreateTime;
ULONG unk6;
ULONG StartAddress;
ULONG ProcessID;
ULONG ThreadID;
ULONG CurrentPriority;
ULONG BasePriority;
ULONG ContextSwitchesPerSec;
ULONG ThreadState;
ULONG ThreadWaitReason;
ULONG unk15;
} SYSTEM_THREAD_INFORMATION;

typedef struct {
ULONG NextOffest; // следующий процесс
ULONG ThreadCount;
ULONG unk2, unk3, unk4, unk5, unk6, unk7;
FILETIME CreateTime;
FILETIME UserTime;
FILETIME KernelTime;
ULONG unk14;
WCHAR *pModuleName; /* unicode */
ULONG BasePriority;
ULONG ProcessID;
ULONG InheritedFromUniqueProcessID;
ULONG HandleCount;
ULONG unk20, unk21;
ULONG PeekVirtualSize;
ULONG VirtualSize;
ULONG PageFaultCountPerSec;
ULONG PeakWorkingSetSize;
ULONG WorkingSetSize;
ULONG PeekPagedPoolUsage;
ULONG PagedPoolUsage;
ULONG PeekNonPagedPoolUsage;
ULONG NonPagedPoolUsage;
ULONG unk31; /* PagefileUsage ? */
ULONG PeakPagefileUsage;
ULONG unk33; /* PrivateBytes ? */
SYSTEM_THREAD_INFORMATION ThreadInfos[1]; // потоки данного процесса
} SYSTEM_PROCESS_INFORMATION;

Эта не докуминтировная функция WindowsNT/2K/XP. Не спрашивай меня как с не работать я сам ещё не разобрался!!! Ноя знаю точно что он работает точно также каки EnumProcesses - смотри в MSDN примеры и докуминтацию!!!


Alibaba   (2003-09-15 14:52:00) [7]

procedure TfrmMain.btnGetListClick(Sender: TObject);
var
Wnd : hWnd;
buff: array [0..127] of Char;
begin
lb.Clear;
Wnd := GetWindow(Application.Handle, gw_HWndFirst);
while Wnd <> 0 do
begin {Не показываем:}
if (Wnd <> Application.Handle) and {-Собственное окно}
IsWindowVisible(Wnd) AND {-Невидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0){-Окна без заголовков}
then
begin
GetWindowText(Wnd, buff, sizeof(buff));
lb.Items.Add(StrPas(buff));
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
lb.ItemIndex := 0;
end;


LOX   (2003-09-15 14:35:00) [8]

Напишите по подробнее


Erazzer   (2003-09-14 22:19:00) [9]

Используй API Process32First/Next. Точных названий функций не помню, но ты введи этот текстик и нажми F1, для платформы NT/2K/XP работают ТАКЖЕ функции типа enumprocesses_какая-то хрень, короче смотри справку и разные FAQ, особенно на этом портале!
Seek"n"Destroy...


Erazzer   (2003-09-14 22:16:00) [10]

Используй API Process32First/Next. Точных названий функций не помню, но ты введи этот текстик и нажми F1, для платформы NT/2K/XP работают ТАКЖЕ функции типа enumprocesses_какая-то хрень, короче смотри справку и разные FAQ, особенно на этом портале!
Seek"n"Destroy...


LOX   (2003-09-14 12:30:00) [11]

Ответьте, пожалуйста.


Наверх

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