
21.03.2013, 00:06
|
Прохожий
|
|
Регистрация: 11.03.2013
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
|
|
А все понял. Вот есть такой код поиска всех запусщеных процессов:
Код:
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; //имя модуля
Wnd : hWnd;
buff: array[0..$FFF] of char;
begin
sl.Clear;
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
begin //если это Win9x
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 //Если WinNT/2000/XP
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(ExtractFileName(string(ModName));
CloseHandle(ph);
end;
end;
end;
end;
И такой код поиска заголовка активных окон:
Код:
Form6.ListBox1.Clear;
// Получаем hWnd первого окна
Wnd := GetWindow(Form6.Handle, gw_HWndFirst);
// Цикл поиска окон
WHILE Wnd <> 0 DO BEGIN
IF (Wnd <> Application.Handle) AND // -Собственное окно
IsWindowVisible(Wnd) AND // -Невидимые окна
(GetWindow(Wnd, gw_Owner) = 0) AND // -Дочернии окна
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) // -Окна без заголовков
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
Form6.ListBox1.Items.Add(StrPas(buff));
END;
// Ищем новое окно
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
Form6.ListBox1.ItemIndex := 0;
Как можно их вместе соединить что-бы получить результат типа такого "calc.exe -- Калькулятор" ? И выводить это все комбобокс
|