Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процессы 
:(
    Опции темы
Ripper
Дата 23.9.2004, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Как мне сделать что то вроде CAD в ХР...
надо получить список процессов + приоритет + путь запущенного файла + возможность завершить этот процесс... наверно в ListView.
Я где то находил пример но я в этом совсем не шарю и ничего кроме самого списка процессов получить не удается. Может есть готовый примерчик?


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Girder
Дата 23.9.2004, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Код
uses tlhelp32;
...
ListPr: TListView; //Создай четыре столбца
...
function TForm.HexToStr(HexInt:Cardinal):string;
var s:string;
   b:byte;
   i:integer;
begin
s:='00000000';
i:=8;
repeat
 b:=HexInt mod 16;
 HexInt:=HexInt div 16;
 b:=b+$30;
 if b>$39 then b:=b+$7;
 s[i]:=chr(b);
 if HexInt=0 then i:=1;
 dec(i);
until (i=0);
Result:=s;
end;

function TForm.ProcessPriToStr(nPri:Longint):string;
var f:boolean;
begin
f:=true;
case nPri of
 0: Result:='Н/Д';
 1,4: Result:='Низкий';
 6: Result:='Ниже среднего (-2)';
 7: Result:='Ниже среднего (-1)';
 8: Result:='Средний';
 9: Result:='Выше среднего (+1)';
 10: Result:='Выше среднего (+2)';
 11: Result:='Ниже высокого (-2)';
 12: Result:='Ниже высокого (-1)';
 13: Result:='Высокий';
 14: Result:='Выше высокого (+1)';
 15: Result:='Выше высокого (+2) - Реального времени(для потоков)';
 24: Result:='Реального времени';
else
 f:=false;
 Result:='Приоритет N: '+IntToStr(nPri);
end;
if f then Result:=Result+' = '+IntToStr(nPri);
end;

procedure TForm.LoadProcessID();
//Процессы
var H :THandle;
   Process32:TProcessEntry32;
   next : bool;
   i:DWord;
procedure AddItem(Name,nPID,nPri,nThreads:String);
// Add ListPr
var
 Item:TListItem;
begin
 Item:=ListPr.Items.Add();
 Item.Caption:=Name;
 Item.SubItems.Add(nPID);
 Item.SubItems.Add(nPri);
 Item.SubItems.Add(nThreads);
end;
begin
Process32.dwSize:=SizeOf(TProcessEntry32);
H:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ListPr.Items.BeginUpdate;
ListPr.Items.Clear;
if Process32First(H,Process32) then
 begin
  i:=Process32.th32ProcessID;
  AddItem(Trim(StrPas(Process32.szExeFile)),IntToStr(i)+' ('+HexToStr(i)+')',
          ProcessPriToStr(Process32.pcPriClassBase),IntToStr(Process32.cntThreads));
 Repeat
   Next:=Process32Next(H,Process32);
   if Next  Then
    begin
     i:=Process32.th32ProcessID;
     AddItem(Trim(StrPas(Process32.szExeFile)),IntToStr(i)+' ('+HexToStr(i)+')',
             ProcessPriToStr(Process32.pcPriClassBase),IntToStr(Process32.cntThreads));
    end;
  Until Not(Next);
 end;
CloseHandle(H);
ListPr.Items.EndUpdate;
end;


PS: Для завершения процесса ты должен открыть процесс hProcess = OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, false, Process32.th32ProcessID) а потом TerminateProcess(hProcess, -1). Конечно надо бы и всем окна процесса послать сообщение WM_CLOSE. И обязательно не забыть проверить процесс IsWOWProcess, а то мож это 16 битное приложение - его не много не так завершают wink.gif

Удачи.

Это сообщение отредактировал(а) Girder - 23.9.2004, 16:29


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Ripper
Дата 23.9.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Спасибо... получилось)
Ещё пару уточнений... а что значит творая колонка? Последняя - кол-во потоков занимаемых процессом я так понял? И ещё а как получить путь к .exe файлу? process32.szexefile? Просто я вообще не догоняю как это все работает т.к. в 3х (!) книг нету об этом ни слова =) Все есть а этого нет=) Попробую разобратся...
Добавлено @ 16:51
и сnt_Usage - Занимаемая память?)


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Girder
Дата 23.9.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата
а что значит творая колонка
Идентификатор процесса

Цитата
как получить путь к .exe файлу? process32.szexefile?
Можно так:
Код
function GetPath(pId:cardinal):string;
var HS:cardinal;
     ME:TModuleEntry32;
begin
Result:='';
HS:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pId);
ME.dwSize:=SizeOf(ME);
if Module32First(HS,ME) then
 Result:=ME.szExePath;
CloseHandle(HS);
end;
Использование s:=GetPath(Process32.th32ProcessID);


PS: Почитай: http://web.ict.nsc.ru/~cancel/delphi/tollhlp32.html

Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Ripper
Дата 23.9.2004, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



А как узнать кол-во используемой памяти?)



--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Girder
Дата 23.9.2004, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



1) Читай по ссылке выше(анализируй модули, кучки модулей) - писать лень, т.ч извени.
2) Для NT:
Код
uses psAPI;
function GetMemory(pId:cardinal):Cardinal;
var pmc:PPROCESS_MEMORY_COUNTERS;
   Size:Integer;
   H:Cardinal;
begin
Result:=0;
H:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,false,pId);
if H<>0 then
 begin
  Size:=SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc,Size);
  pmc^.cb:=Size;
  if GetProcessMemoryInfo(H,pmc,Size) then
   result:=pmc^.WorkingSetSize{pmc^.PeakWorkingSetSize};
  FreeMem(pmc,Size);
  CloseHandle(H);
 end;
end;


Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Ripper
Дата 23.9.2004, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Спасибо)


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.