IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Процессы в памяти
arhimag
сообщение 11.05.2007 20:50
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


Как получить активные процессы но компьютере, через Delphi? а именно их названия?


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 11.05.2007 20:57
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вот недавно делал лабу, тут еще добавление в БД, можно удалить

procedure TfrmProcList.btnGetProcListClick(Sender: TObject);
var
N: DWORD;
i, Module: Byte;
_HANDLE: THandle;
Error: PChar;
s: array [byte] of Char;
ModuleID:array[1..1] of dword;
ProcessID:array[byte] of dword;

ProcName, UserName: String;
currentTime: TTime;

begin
M.Lines.Clear;

try
EnumProcesses(@ProcessID, 255, N);
except on E: Exception do begin
MessageDlg('Не удалось получить список процессов', mtError, [mbOk], 0);
Abort;
end;
end;

N := SizeOf(ProcessID) div SizeOf(DWORD);
FillChar(s, SizeOf(s), #0);
UserName := GetUserFromWindows;
currentTime := Now;

tblUser.Append;
tblUser.FieldByName('U_Name').AsString := UserName;
tblUser.FieldByName('U_Time').AsDateTime := currentTime;
tblUser.Post;

tblProc.MasterSource := dsUser;
tblProc.IndexName := 'idxP_UID';

for i := 0 to pred(N) do try
_HANDLE := OpenProcess(PROCESS_QUERY_INFORMATION+PROCESS_VM_READ
+SYNCHRONIZE, false, ProcessID[i]);
if _HANDLE > 0 then begin

EnumProcessModules(_HANDLE, @ModuleID, 4, N);

Module := GetModuleFileNameEx(_HANDLE, ModuleID[1], @s, SizeOf(s));

if Module > 0 then begin

ProcName := ExtractFileName(s);

if (edtMask.Text = '') or (Pos(edtMask.Text, ProcName) <> 0) then
M.Lines.Add(Format('%s : %d', [ ProcName , ProcessID[i] ]));

tblProc.Append;
tblProc.FieldByName('P_ProcName').AsString := ProcName;
tblProc.FieldByName('P_ProcID').AsInteger := ProcessID[i];
tblProc.Post;
end;
end;
CloseHandle(_Handle);
except on E: Exception do MessageDlg('Ошибка при обработке процесса: ' + E.Message, mtError, [mbOk], 0);
end;

end;


 M.Lines.Add(Format('%s : %d', [ ProcName , ProcessID[i] ])); // M - Мемо


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 12.07.2025 17:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"