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

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

Процессы в системе [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

Может, поможет...


Наверх

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