Процессы в памяти |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Процессы в памяти |
arhimag |
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 424 Пол: Мужской Репутация: 2 |
Как получить активные процессы но компьютере, через Delphi? а именно их названия?
-------------------- Чего хочет женщина – того хочет Бог
|
Артемий |
Сообщение
#2
|
Помощник капитана Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: 2 |
Из Drkb:
Цитата(DRKB) Автор: Василий Программа не видна по Ctrl+Alt+Del, и сама оттуда же может спрятать любой из процессов(правда, не все с самого начала "светятся" по Ctrl+Alt+Del) или завершить его. Простой пример для знакомства с ToolHelp32. В исходном коде есть недоработки, например, процедура Delproc получает в качестве параметра строку, затем переводит ее в целочисленный тип(integer), хотя можно передавать сразу число. Заморочка была в проверке числа-индекса на подлинность, а так как я выдрал часть кода из более ранней своей проги, я не стал это менять, а просто подогнал до рабочей версии. Оптимизацией кода вы можете заняться сами по желанию(вы можете, если хотите, а если не хотите, то вы не обязаны, вы посто могли бы... да... )) Программа не работала в WinNT 4.0, но в Win9x работать должна. unit main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, tlhelp32, StdCtrls, ComCtrls, Buttons; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; Button2: TButton; Button4: TButton; Button5: TButton; StatusBar1: TStatusBar; Button6: TButton; procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } procedure ListProcesses; procedure Delproc(numb:string); public { Public declarations } end; var Form1: TForm1; processID:array[1..50] of integer; function RegisterServiceProcess(dwProcessID,dwType:integer):integer;stdcall;external 'kernel32.dll'; implementation {$R *.DFM} procedure TForm1.delproc(numb:string); var c1:Cardinal; pe:TProcessEntry32; s1,s2:string; x:integer; begin x:=0; try Strtoint(numb); except Statusbar1.SimpleText:='Invalid number'; exit; end; c1:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0); if c1=INVALID_HANDLE_VALUE then begin Statusbar1.SimpleText:='Process listing failed'; exit; end; try pe.dwSize:=sizeof(pe); if Process32First(c1,pe) then repeat inc(x); s1:=ExtractFileName(pe.szExeFile); s2:=ExtractFileExt(s1); Delete(s1,length(s1)+1-length(s2),maxInt); if x=strtoint(numb) then if terminateprocess(OpenProcess(PROCESS_ALL_ACCESS,false,pe.th32ProcessID),1) then begin Statusbar1.SimpleText:='Process '+s1+' terminated.'; end else Statusbar1.SimpleText:=('Couldnt terminate process'+pe.szExeFile); until not Process32Next(c1,pe); finally CloseHandle(c1); end; end; procedure Tform1.ListProcesses; var c1:Cardinal; pe:TProcessEntry32; s1,s2:string; x:integer; begin X:=0; c1:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0); if c1=INVALID_HANDLE_VALUE then begin Statusbar1.SimpleText:=('Информация о процессах закрыта.'); exit; end; try pe.dwSize:=sizeof(pe); if Process32First(c1,pe) then repeat inc(x); s1:=ExtractFileName(pe.szExeFile); s2:=ExtractFileExt(s1); Delete(s1,length(s1)+1-length(s2),maxInt); Listbox1.Items.Add(Inttostr(x)+' '+s1+' : '+pe.szExeFile); ProcessId[x]:=pe.th32ProcessID; //ListBox1.Items.Add(inttostr(pe.th32ProcessID)); until not Process32Next(c1,pe); finally CloseHandle(c1); end; end; procedure TForm1.Button4Click(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); begin Button1.Enabled:=false; Button5.Enabled:=false; Button6.Enabled:=false; ListProcesses; if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID,1); end; procedure TForm1.Button2Click(Sender: TObject); begin Listbox1.Clear; ListProcesses; end; procedure TForm1.Button1Click(Sender: TObject); var p:integer; begin //hide with Listbox1 do p:=Listbox1.Items.IndexOf(Listbox1.items[itemindex])+1; if not (csDesigning in ComponentState) then RegisterServiceProcess(ProcessID[p],1); with Listbox1 do StatusBar1.SimpleText:=(Listbox1.items[itemindex]+ ' hidden'); end; procedure TForm1.Button5Click(Sender: TObject); var p:integer; begin //show with Listbox1 do p:=Listbox1.Items.IndexOf(Listbox1.items[itemindex])+1; if not (csDesigning in ComponentState) then RegisterServiceProcess(ProcessID[p],0); with Listbox1 do StatusBar1.SimpleText:=(Listbox1.items[itemindex]+ ' shown'); end; procedure TForm1.ListBox1Click(Sender: TObject); begin Button1.Enabled:=true; Button5.Enabled:=true; Button6.Enabled:=true; end; procedure TForm1.Button6Click(Sender: TObject); var p:integer; begin with Listbox1 do p:=Listbox1.Items.IndexOf(Listbox1.items[itemindex])+1; delproc(inttostr(p)); end; end. -------------------- Dum spiro spero!
|
klem4 |
Сообщение
#3
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Вот недавно делал лабу, тут еще добавление в БД, можно удалить
procedure TfrmProcList.btnGetProcListClick(Sender: TObject); M.Lines.Add(Format('%s : %d', [ ProcName , ProcessID[i] ])); // M - Мемо -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
arhimag |
Сообщение
#4
|
Знаток Группа: Пользователи Сообщений: 424 Пол: Мужской Репутация: 2 |
klem4, а ты не мог бы весь код приложить? Просто что-то скомпилить не могу
Код EnumProcesses(@ProcessID, 255, N); На это ругается Добавлено через 8 мин. Предыдущий вопрос снят, вопрос следующий вот нашел я процесс, например opera как мне получить сайты, на которых сейчас висит пользователь? Сообщение отредактировано: arhimag - -------------------- Чего хочет женщина – того хочет Бог
|
volvo |
Сообщение
#5
|
Гость |
Если поможет, могу рассказать, как добраться до названий закладок (Tab-ов) в браузере Опера.
|
arhimag |
Сообщение
#6
|
Знаток Группа: Пользователи Сообщений: 424 Пол: Мужской Репутация: 2 |
Volvo, очень поможет, буду благодарен. А как добраться до названия закладок в FireFox и названия окна IE, случайно не знаешь?
Но даже за оперу буду очень благодарен. Сообщение отредактировано: arhimag - -------------------- Чего хочет женщина – того хочет Бог
|
volvo |
Сообщение
#7
|
Гость |
Положи на форму TreeView, кнопку, и на OnClick кнопки вызывай вот это:
procedure TForm1.Sys_Windows_Tree(Node: TTreeNode;© Rouse_ Так как ProcessID тебе известен, то открой дерево этого процесса, и посмотри там, где я показал на скриншоте (находишь дочернее окно класса OpWindow, у которого есть потомок класса OUIWINDOW, и у него ищешь потомки классов OperaWindowClass -> OpWindow -> (все потомки этого окна - открытые на данный момент закладки Оперы))... То же самое можно сделать и не выводя ненужную информацию в TreeView... С FireFox-ом все несколько сложнее: сами-то закладки найти можно, это окна в следующей иерархии: MozillaUIWindowClass -> MozillaWindowClass -> (все дочерние окна - Tab-ы), но вот Caption их почему-то не определяется... Так же можно посмотреть и то, что касается IE... Экспериментируй... Добавлено через 3 мин. А, да... Совсем забыл - вызывать вот так: procedure TForm1.Button1Click(Sender: TObject); Сообщение отредактировано: volvo - Эскизы прикрепленных изображений |
arhimag |
Сообщение
#8
|
Знаток Группа: Пользователи Сообщений: 424 Пол: Мужской Репутация: 2 |
Спасибо, помог. Буду дальше эксперементировать.
-------------------- Чего хочет женщина – того хочет Бог
|
Текстовая версия | 24.12.2024 0:54 |