![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процессы в системе [D7, Win2k, WinXP]
sesh © (2004-09-01 15:05:00)День добрый! Подскажите пож-ста как реализовать следующее:
Мне необходимо просмотреть все процессы в системе и если нахожу к примеру процесс winamp.exe чтоб сработало какое-нибудь мое действие.
Digitman (2004-09-01 17:34:00) [1]
> GrayFace © (01.09.04 17:30) [8]
извини, но это было сугубо частное обсуждение
GrayFace (2004-09-01 17:30:00) [2]Digitman © (01.09.04 15:26) [2]
может, предложить автору "утренний" обсужденный код ? заодно и проверка и обкатка ?
Дайте, plz, ссылку на ветку, в которой вы это обсуждали.
Alex870 (2004-09-01 17:23:00) [3]Во-во, а psapi работает только в NT.
Digitman (2004-09-01 16:09:00) [4]
> sesh (01.09.04 15:58) [5]
да, в общем и целом это приводит к заветной цели
sesh (2004-09-01 15:58:00) [5]Спасибо, я нашел тут код один, вроде работает нормально, вот:
procedure GetProcessList(var sl:TStrings);
var
pe:TProcessEntry32;
ph, snap:THandle;
mh:hmodule;
procs:array[0..$fff] of dword;
count, cm:cardinal;
i:integer;
ModName:array[0..max_path] of char;
begin
sl.Clear;
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
begin
snap:=CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
if integer(snap)=-1 then
begin
exit;
end else
begin
pe.dwSize:=sizeof(pe);
if Process32First(snap, pe) then
repeat
sl.Add(string(pe.szExeFile));
until not Process32Next(snap, pe);
end;
end
else
begin
if not EnumProcesses(@procs, sizeof(procs), count) then
begin
exit;
end;
for i := 0 to count div 4 - 1 do
begin
ph:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
false, procs[i]);
if ph>0 then
begin
EnumProcessModules(ph, @mh, 4, cm);
GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
sl.Add(string(ModName));
CloseHandle(ph);
end;
end;
end;
end;
Digitman (2004-09-01 15:55:00) [6]
> Игорь Шевченко © (01.09.04 15:42) [3]
я не в плане внедрения ... это - "побочный эффект" ... вместо вызова InjectLibrary() можно всандалить все что угодно .. главное - там используется банальнейший psapi, т.е. один из вариантов решения задачи
Игорь Шевченко (2004-09-01 15:42:00) [7]Digitman © (01.09.04 15:26) [2]
Сергей, я не думаю, что в этом случае внедрение DLL окажется полезным, NtQuerySystemInformation неплохо справляется с получением списка процессов, а найти процесс по имени в том, списке, который реализован в коде по ссылке, не составит особого труда.
Digitman (2004-09-01 15:26:00) [8]
> Игорь Шевченко © (01.09.04 15:16) [1]
может, предложить автору "утренний" обсужденный код ? заодно и проверка и обкатка ?
Игорь Шевченко (2004-09-01 15:16:00) [9]http://www.schevchenko.net.ru/SRC/QuerySystemInformation_60.zip
Может, поможет...