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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2014, 16:33   #1
Mik92
Пользователь
 
Регистрация: 25.08.2014
Сообщений: 87
Печаль Перебор процессов из Memo1

Привет, долго сидел и решил все таки спросить.
Получаю процессы запущенные на данный момент, затем записываю их в Memo1. Далее хочу получить хэндлы этих процессов а именно перебрать каждый процесс из Memo1 и получить его хэндл затем записать его хэндл в Memo2 и так пока процессы не закончатся. Проблема в переборе процессов и получение его хэндла. Помогите, наведите на правильный путь я совсем запутался.
Mik92 вне форума Ответить с цитированием
Старый 25.08.2014, 16:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хендл всмысле PID или хендл главного окна процесса (если оно есть)?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2014, 16:46   #3
Mik92
Пользователь
 
Регистрация: 25.08.2014
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хендл всмысле PID или хендл главного окна процесса (если оно есть)?
Хэндл главного окна процесса, например "Project1 - Delphi XE4 - Uni1..."
Mik92 вне форума Ответить с цитированием
Старый 25.08.2014, 16:51   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Mik92 Посмотреть сообщение
Хэндл главного окна процесса
Можно покопаться в этом примере.
Нашёл в своё время на форуме. Где, сам уже не помню.
Вложения
Тип файла: rar ProcInfo.rar (8.2 Кб, 9 просмотров)
Streletz вне форума Ответить с цитированием
Старый 25.08.2014, 17:01   #5
Mik92
Пользователь
 
Регистрация: 25.08.2014
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Можно покопаться в этом примере.
Нашёл в своё время на форуме. Где, сам уже не помню.
Не думаю что это хорошо подойдет к моей проблеме . Что то похожее я уже в гугле находил но к сожалению это не то что меня интересует. Получить процессы это не проблема была, проблема в том как брать каждую строку из Memo1 считая ее как за процесс и получая ее хэндл при этом записывая его в Memo2 и так каждую строку.
Думаю что то в строну подсчета строк а затем по отдельности брать каждую и выполнять действия.
Mik92 вне форума Ответить с цитированием
Старый 25.08.2014, 17:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showthread.php?t=74962
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2014, 17:35   #7
Mik92
Пользователь
 
Регистрация: 25.08.2014
Сообщений: 87
По умолчанию

Получение хэндла процесса получилось в таком виде
Код:
procedure TForm1.sButton1Click(Sender: TObject);
var
hWindow: HWND;
hWnd: THandle;
hProc, PID, numberRead, buf : DWORD;
WindowText: string;
begin
hWnd:= GetHwnd(GetCurrentProcessId());
prID:=GetProcess(ProcessName);
hWnd:=findwindow('TForm1', nil);
hProc:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
SetLength(WindowText, 255);
SetLength(WindowText, GetWindowText(hWnd, @WindowText[1], Length(WindowText)));
sMemo1.Text:= WindowText;
end;
Но это получение хэндла одного процесса, как сделать чтобы перебирало все процессы из Memo1?
Mik92 вне форума Ответить с цитированием
Старый 25.08.2014, 18:04   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пройти по моей ссылке не желаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.08.2014, 18:22   #9
Mik92
Пользователь
 
Регистрация: 25.08.2014
Сообщений: 87
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Пройти по моей ссылке не желаешь?
Если честно, не разобрался

Как воспользоваться этой функцией?
Код:
function search(name:string): Cardinal;
var ExeFile    : String;
    PE         : TProcessEntry32;
    FSnap,Handl: THandle;
begin
 result:= 0;
 FSnap:= Tlhelp32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 //
 PE.dwSize:= SizeOf(PE);
 if (Tlhelp32.Process32First(FSnap,PE)) Then
  Repeat
   ExeFile:= PE.szExeFile;
   //
   if pos(pchar(lowercase(name)), lowercase(ExeFile))>0 then
    Begin
     result:= PE.th32ProcessID;
     //Handl:= OpenProcess(PROCESS_ALL_ACCESS,False,PE.th32ProcessID); // PE.th32ProcessID
     //Прекращаем процесс
     terminateProcess(Handl,1);
     WaitForSingleObject(Handl,INFINITE); //Ждем завершения
     break
    End;
   Until Not Process32Next(FSnap,PE)
end;

Последний раз редактировалось Stilet; 25.08.2014 в 18:49.
Mik92 вне форума Ответить с цитированием
Старый 25.08.2014, 18:51   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как воспользоваться этой функцией?
Этой никак. Ее нужно изучить. Она вообще-то останавливает процесс по имени экзешника, и тебе подойдет только как наглядный пример цикла прохода по списку процессов.
Цитата:
Если честно, не разобрался
А че злой такой?
Я помочь хотел. Дал код с примером прохода по списку и получением заголовков окон у этих процессов, а ты злишься
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа перебора вариантов (изменить перебор цифровой на перебор буквенный) BArt2000 Паскаль, Turbo Pascal, PascalABC.NET 5 02.03.2015 12:56
Memo1 и Memo2 в delphi Death-woolf Общие вопросы Delphi 4 17.04.2012 21:44
работа в memo1 Пяtnышк0 Помощь студентам 1 02.04.2012 19:32
Создание задания, добавление процессов, удаление процессов RAZOR1703 Win Api 12 16.02.2012 18:07
memo1 и массив kuzmich Общие вопросы Delphi 3 12.08.2011 10:56