Показать сообщение отдельно
  #3  
Старый 21.03.2013, 00:06
DarkSmile DarkSmile вне форума
Прохожий
 
Регистрация: 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 -- Калькулятор" ? И выводить это все комбобокс
Ответить с цитированием