Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2012, 01:28
xNeKiToSx xNeKiToSx вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 10
Репутация: 10
По умолчанию Все о процессах)

привет всем. как можно получить список запущеных процессов (а не окон) и делать различные операции(приоритет, завершение, проверка пользователя и занятой ОП)?... прийму любые ссылки на статьи спасибо заранее за помощь) у меня есть исходник диспетчера задач. хорошая штука но все равно не могу с него ничего слить))) в коде путаюсь... помогите написать программу типа - кнопка и мемо. нажимаю на кнопку и в мемо список текущих процессов... все заранее спасибо!
Ответить с цитированием
  #2  
Старый 23.01.2012, 01:46
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Подойдёт?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Wnd: hWnd;
  buff: array[0..127] of Char;
begin
  ListBox1.Clear;
  Wnd := GetWindow(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));
      ListBox1.Items.Add(StrPas(buff));
    end;
    Wnd := GetWindow(Wnd, GW_HWNDNEXT);
  end;
  ListBox1.ItemIndex := 0;
end;
вот ещё:
Код:
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; //имя модуля
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
      Exit;

    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(string(ModName));
        CloseHandle(ph);
      end;
    end;
  end;
end;

Пример использования: 

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp: TStrings;
begin
  tmp := memo1.Lines;
  GetProcessList(tmp);
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 23.01.2012 в 01:49.
Ответить с цитированием
  #3  
Старый 23.01.2012, 02:24
xNeKiToSx xNeKiToSx вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 10
Репутация: 10
По умолчанию

спасибо большое, сейчас проверю)
Ответить с цитированием
  #4  
Старый 23.01.2012, 05:52
xNeKiToSx xNeKiToSx вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 10
Репутация: 10
По умолчанию

хм неизвестный индетификатор EnumProcesses(@procs, sizeof(procs), count)
Ответить с цитированием
  #5  
Старый 23.01.2012, 05:57
xNeKiToSx xNeKiToSx вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 10
Репутация: 10
По умолчанию

спасибо) разобрался) 2 код хорош)
Ответить с цитированием
  #6  
Старый 24.01.2012, 11:33
Zorkov Igor Zorkov Igor вне форума
Новичок
 
Регистрация: 28.07.2009
Сообщения: 85
Репутация: 50
По умолчанию Завершение процесса

Код:
function AdjustCurrentProcessPrivileges(PrivilegeName: WideString): Boolean;
var
  TokenHandle: THandle;
  TokenPrivileges: TTokenPrivileges;
  ReturnLength: DWORD;
begin
  Result := False;
  try
    if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
    begin
      try
        LookupPrivilegeValueW(nil, PWideChar(PrivilegeName), TokenPrivileges.Privileges[0].Luid);
        TokenPrivileges.PrivilegeCount := 1;
        TokenPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        if AdjustTokenPrivileges(TokenHandle, False, TokenPrivileges, 0, nil, ReturnLength) then
          Result := True;
      finally
        CloseHandle(TokenHandle);
      end;
    end;
  except
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Получаем привилегии отладчика что бы можно было открывать и завершать системные процессы
  AdjustCurrentProcessPrivileges('SeDebugPrivilege');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ProcessHandle: THandle;
begin
  ProcessHandle:= OpenProcess(PROCESS_TERMINATE, True, StrToInt(Edit1.Text));
  if ProcessHandle <> 0 then
  begin
    try
      if not TerminateProcess(ProcessHandle, 0) then
        ShowMessage('Невозмжно завершить процесс (' + Edit1.Text + ')');
    finally
      CloseHandle(ProcessHandle);
    end;
  end
  else
  begin
    ShowMessage('Невозмжно открыть процесс (' + Edit1.Text + ')');
  end;
end;
Ответить с цитированием
  #7  
Старый 28.06.2012, 14:47
Helpix Helpix вне форума
Прохожий
 
Регистрация: 28.06.2012
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от xNeKiToSx
спасибо) разобрался) 2 код хорош)
Если разобрался, так поделись с другими?

Подключить еще нужно в uses Psapi и tlhelp32

Последний раз редактировалось Helpix, 28.06.2012 в 14:51.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:26.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025