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

> ВНИМАНИЕ!

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

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


Знаток
****

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

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


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


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


Гость






Положи на форму TreeView, кнопку, и на OnClick кнопки вызывай вот это:

procedure TForm1.Sys_Windows_Tree(Node: TTreeNode;
AHandle: HWND; ALevel: Integer);
type
TRootNodeData = record
Node: TTreeNode;
PID: Cardinal;
end;
var
szClassName, szCaption, szLayoutName: array[0..MAXCHAR - 1] of Char;
szFileName : array[0..MAX_PATH - 1] of Char;
Result: String;
PID, TID: Cardinal;
I: Integer;
RootItems: array of TRootNodeData;
IsNew: Boolean;
begin
while AHandle <> 0 do begin
GetClassName(AHandle, szClassName, MAXCHAR);
GetWindowText(AHandle, szCaption, MAXCHAR);
if GetWindowModuleFilename(AHandle, szFileName, SizeOf(szFileName)) = 0 then
FillChar(szFileName, 256, #0);
TID := GetWindowThreadProcessId(AHandle, PID);

AttachThreadInput(GetCurrentThreadId, TID, True);
VerLanguageName(GetKeyboardLayout(TID) and $FFFF, szLayoutName, MAXCHAR);
AttachThreadInput(GetCurrentThreadId, TID, False);

Result := Format('%s [%s] Caption = %s, Handle = %d, Layout = %s',
[String(szClassName), String(szFileName), String(szCaption),
AHandle, String(szLayoutName)]);

if ALevel in [0..1] then begin
IsNew := True;
for I := 0 to Length(RootItems) - 1 do
if RootItems[I].PID = PID then begin
Node := RootItems[I].Node;
IsNew := False;
Break;
end;
if IsNew then begin
SetLength(RootItems, Length(RootItems) + 1);
RootItems[Length(RootItems) - 1].PID := PID;
RootItems[Length(RootItems) - 1].Node :=

TreeView1.Items.AddChild(nil, 'PID: ' + IntToStr(PID));
Node := RootItems[Length(RootItems) - 1].Node;
end;
end;

Sys_Windows_Tree(TreeView1.Items.AddChild(Node, Result),
GetWindow(AHandle, GW_CHILD), ALevel + 1);

AHandle := GetNextWindow(AHandle, GW_HWNDNEXT);
end;
end;

© Rouse_

Так как ProcessID тебе известен, то открой дерево этого процесса, и посмотри там, где я показал на скриншоте (находишь дочернее окно класса OpWindow, у которого есть потомок класса OUIWINDOW, и у него ищешь потомки классов OperaWindowClass -> OpWindow -> (все потомки этого окна - открытые на данный момент закладки Оперы))... То же самое можно сделать и не выводя ненужную информацию в TreeView...

С FireFox-ом все несколько сложнее: сами-то закладки найти можно, это окна в следующей иерархии:
MozillaUIWindowClass -> MozillaWindowClass -> (все дочерние окна - Tab-ы), но вот Caption их почему-то не определяется...

Так же можно посмотреть и то, что касается IE... Экспериментируй...

Добавлено через 3 мин.
А, да... Совсем забыл - вызывать вот так:

procedure TForm1.Button1Click(Sender: TObject);
begin
Sys_Windows_Tree(nil, GetDesktopWindow, 0);
end;


Сообщение отредактировано: volvo - 14.05.2007 11:15


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

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


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

 



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