Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 21:24   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Счастье [код] Процессы и PID , нужно разделить на 2 колонки.

Тему кое-как назвал=)
Суть вот в чем=)
Нашёл на форуме модуль для работы с процессами...
WinProc.pas , спасибо его Автору за проделанную работу, модуль пришёлся кстати=)

Все устраивает, только вот, нужно подредактировать процедуру, которая выводит список процессов и их PID.
Код:
Procedure GetProcessList(Proc: TStrings);
Var
HSnapshot: THandle;
Pe32: TProcesSentry32;
Begin
Proc.Clear;
HSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
Pe32.DwSize:=SizeOf(TProcesSentry32);
If (Process32First(HSnapshot,Pe32)) Then
Repeat
Proc.Add(IntToStr(Pe32.TH32ProcessId) + ': ' + Pe32.SzExeFile);
Until Not Process32Next(HSnapshot,Pe32);
CloseHandle(HSnapshot);
End;
как видно нужен обьект TStrings
и там выводиться все в формате вида:
Код:
508:explorer.exe
2025:iexplore.exe
это не устрайвает...
Как подредактировать правельно что бы процедура работала с компонентом TreeView, и процессы
писались в колонку1
а PID процессов, в другую=)
как?
я попытался но неполучилось=(
Человек_Борща вне форума Ответить с цитированием
Старый 28.02.2010, 21:39   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Даю наводку))

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStrings;
  pid, name: String;
begin
  sl := TStringList.Create;
  sl.NameValueSeparator := ':';
  sl.Values['1234'] := 'explorer.exe';
  sl.Values['343'] := 'system.exe';
  sl.Values['4365'] := 'winamp.exe';

  pid := sl.Names[0];
  name := sl.Values[pid];
  sl.Free;
end;
psycho-coder вне форума Ответить с цитированием
Старый 28.02.2010, 21:46   #3
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

м?
Код:
Procedure GetProcessList(exe,PID: TStrings);
Var
HSnapshot: THandle;
Pe32: TProcesSentry32;
Begin
exe.Clear;
PID.clear;
HSnapshot:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
Pe32.DwSize:=SizeOf(TProcesSentry32);
If (Process32First(HSnapshot,Pe32)) Then
Repeat
PID.Add(IntToStr(Pe32.TH32ProcessId));
exe.add(Pe32.SzExeFile);
Until Not Process32Next(HSnapshot,Pe32);
CloseHandle(HSnapshot);
End;
Код:
...
var
   exe,PID:TStringList;
   i:integer;
begin
   exe:=TStringList.Create;
   PID:=TStringList.Create;
   GetProcessList(exe,PID);
   for i:=0 to exe.count-1 do
      //добавить в новую строку 1й колонки exe[i];
   for i:=0 to PID.count-1 do
      //добавить в новую строку 2й колонки PID[i];
   exe.free;
   PID.free;
end;

Последний раз редактировалось Denager; 28.02.2010 в 21:52.
Denager вне форума Ответить с цитированием
Старый 28.02.2010, 21:52   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Denager
Хочу оспорить Ваш метод!
А вот, если Вам попадется чья то библиотека, которая тоже будет предоставлять информацию, в виде неудобном для Вас, то Вы тоже будете ее переделывать (ну там дизассемблирование или перекомпиляция)?

Учитесь использовать то, что есть!
psycho-coder вне форума Ответить с цитированием
Старый 28.02.2010, 22:04   #5
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

psycho-coder, согласен, но тут же не dll, хотя в этом Вы правы.
Denager вне форума Ответить с цитированием
Старый 28.02.2010, 22:09   #6
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

А я не согласен... Ведь лишние манипулирования (добовление в SltringList, потом деление на 2 отдельных столбца (pid и name), дальше расфасовка в TreeView) влияют на время выполнения, да и зачем захламливать код... Функция дана в открытом виде, а значит свободна для изминений и редактирования, ну так глупо не воспользоваться и изменить её в лучшую, для себя, сторону...

Не рациональное, тупое копипаст использование чужого кода - плохо влияет на будущие поколения... Так и будут Использовать чужой код выдернутый с форумов и сайтов, а потом с огромными глазами будут спрашивать почему у меня ошибка при выводе результата integer в Label и начнеться паника:

Цитата:
Аааа! Пачему ашипка?! Поправьте!!! Я ж все правильно скопировал!!! Дайте правильный код и скажите куда его писать....
и т.д.

Повашему это правильно?

Последний раз редактировалось W0LF; 28.02.2010 в 22:14.
W0LF вне форума Ответить с цитированием
Старый 28.02.2010, 22:43   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

W0LF, согласен с вами=)
но разве разумно собирать колесо по 100 раз?
аналогично пример с dll, их ведь и придумали для упрощения жизни, что бы не писать одно и тоже по сто раз, а использовать многократно.

точно так же с этим кодом, да я взял его из модуля , что бы как-то улучшить=) например мне надо забирать от туда PID процесса, а процесс и его PID в одной строке. И это весьма затрудняет путь к "желаемому результату".
проще разделять на колонки, брать из одной из них PID, и делать что надо.
Человек_Борща вне форума Ответить с цитированием
Старый 28.02.2010, 23:16   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

2WOLF я с Вами не согласен! Почему? Да потому что процедура теряет свою универсальность.
Мой пример для наводки, как можно сделать с использованием процедуры в неизменном виде. На скорость выполнения если и повлияет, то настолько сильно что Вы даже не заметите.
Цитата:
Не рациональное, тупое копипаст использование чужого кода - плохо влияет на будущие поколения... Так и будут Использовать чужой код выдернутый с форумов и сайтов, а потом с огромными глазами будут спрашивать почему у меня ошибка при выводе результата integer в Label и начнеться паника:
про было-кодеров - это отдельная тема. Программист если и копипастит код, то должен как минимум понимать ЧТО он копирует и КАК это работает. Повторюсь, что я не давал всего кода, а дал лишь "пищу" для размышлений. Этот кусок демонстрирует работу с TStringList, который может помочь, и не нужно переделывать работающий код и нет нужды в его отладке при переделке. TStringList тоже довольно мощный инструмент.
Можно переделать, так чтобы данная процедура раскидывала сразу в TreeView, но я не стал этого делать, из-за соображений универсальности (см. выше)
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++. Есть код нужно исправить ошибки megavolt91 Помощь студентам 1 01.06.2009 18:38
Нужно разделить текст по ячейкам SoFuWa Microsoft Office Excel 2 19.05.2009 18:58
"Разветляющие процессы" Прозьба проверить код! Dmitriy-e-nest Общие вопросы Delphi 3 15.01.2009 23:37
Нужно получить html код страницы NEOkill Работа с сетью в Delphi 2 01.03.2007 16:49