Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

(Как?) Получить pIDы нескольких одинаковых процессов?

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 23.04.2012, 23:07   #1
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию (Как?) Получить pIDы нескольких одинаковых процессов?

Здравствуйте!

Дано: неизвестное количесво процессов, запущенных одним ЕХЕшником.
Задача: узнать pIDы всех процессов.

Никак не получается -___- несколько часов ищу, пробую. Вот отталкиваясь от этого, хотел сделать, но не выходит

Код:
procedure GetPID(EXEname:string);
var
  hSnap: THandle;
  p: TProcessEntry32;
  PID: DWORD;
begin
  p.dwSize := SizeOf(p);
  hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Process32First(hSnap, p) then
    while Process32Next(hSnap, p) do
      if ExtractFileName(p.szExeFile) = EXEname then
      begin
        PID := p.th32ProcessID;
      end;
   end;
Пробовал привязать к "for...do" - получилось как всегда )

Помогите, пожалуйста.
  Ответить с цитированием
Старый 24.04.2012, 00:02   #2
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Класс окна у них должен быть одинаковым, так что можно использовать такой код:
Код:
var
Wnd:THandle;
hProcess,PID,PID1:DWord;
FID:array[0..100] of DWord;
i:integer;
begin
Wnd:=FindWindow('класс окна',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (hProcess<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
end;
В итоге все PID должны лежать в массиве FID
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Пользователь сказал cпасибо:
ktulx (24.04.2012)
Старый 24.04.2012, 07:58   #3
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Не хочу просто говорить, что у меня не получается ))
Но мне не понятно, каким образом инструкции могут повлиять на условия while, если hProcess и PID не меняются вообще, а PID1 всегда принимает значение PID? Само собой разумеется, я что-то не понял -___-

Последний раз редактировалось ktulx; 24.04.2012 в 08:01.
  Ответить с цитированием
Старый 24.04.2012, 16:30   #4
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

ktulx, код работает?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 24.04.2012, 17:41   #5
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

VeTaL_UA, скорее нет, чем да Скажи пожалуйста, при таком раскладе
Код:
begin
Wnd:=FindWindow('класс окна',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (hProcess<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
ShowMessage(IntToStr(FID[1]));
end;
Я должен получить PID второго процесса? Я вместо него получаю какую-то хрень. А по FID[0] вижу PID процесса.
  Ответить с цитированием
Старый 24.04.2012, 21:14   #6
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

ktulx, приношу извинение, не увидел опечатку в коде. Правильно будет так:
Код:
var
Wnd:THandle;
hProcess,PID,PID1:DWord;
FID:array[0..100] of DWord;
i:integer;
begin
Wnd:=FindWindow('класс окна',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (PID<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 24.04.2012, 22:09   #7
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

VeTaL_UA, жестокий ты разве можно так мозг ламеру выносить?
Я уже почти написал свою функцию какими-то окольными путями )))
Спасибо большое за помощь, сейчас проверю.

Добавлено через 1 час 19 минут
точно так же себя ведёт. Запустил два блокнота. По нулевому индексу находит PID, по [1] - что-то не то.

Всё таки либо я идиот, либо в коде защита от идиотов + я идиот Ведь после первого прохода цикла, условие уже не выполняется и в массив идёт только одна запись. Терабайт мне в ухо..

Последний раз редактировалось ktulx; 25.04.2012 в 05:05. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 25.04.2012, 17:44   #8
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

ktulx, я не даю не рабочих кодов
Код:
var
Wnd:THandle;
hProcess,PID,PID1:DWord;
FID:array[0..100] of DWord;
i:integer;
begin
Wnd:=FindWindow('Notepad',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (PID<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
end;
Код без проблем записывает PID всех запущенных блокнотов в массив
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 26.04.2012, 08:18   #9
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Да я на свою голову грешу, а не на твой код ) но это уже дело принципа. Я ведь явно что-то делаю не так.

Шлёпаю это на кнопку
Код:
var
Wnd:THandle;
hProcess,PID,PID1:DWord;
FID:array[0..100] of DWord;
i:integer;
begin
Wnd:=FindWindow('Notepad',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (PID<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
ShowMessage(IntToString(FID[0]));
end;
получаю идентификатор блокнота. Шлёпаю это
Код:
var
Wnd:THandle;
hProcess,PID,PID1:DWord;
FID:array[0..100] of DWord;
i:integer;
begin
Wnd:=FindWindow('Notepad',nil);
GetWindowThreadProcessId(Wnd,@PID);
i:=0;
 while (PID<>0) and (PID<>PID1) do
  begin
  FID[i]:=PID;
  PID1:=PID;
  inc(i);
  end;
ShowMessage(IntToString(FID[1]));
end;
получаю хрень.
  Ответить с цитированием
Старый 26.04.2012, 17:36   #10
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Сколько у тебя блокнотов запущено?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 26.04.2012, 18:09   #11
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Два или три - результат тот же
  Ответить с цитированием
Старый 26.04.2012, 22:31   #12
Бандеровец
 Лейтенант-командор
Аватар для VeTaL_UA
 
VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(VeTaL_UA сломал счётчик популярности :(
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
Отправить сообщение для VeTaL_UA с помощью ICQ Отправить сообщение для VeTaL_UA с помощью Skype™
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Повторю. У меня код работает. Ищи ошибку у себя.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.

Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.


  Ответить с цитированием
Старый 27.04.2012, 15:25   #13
 Разведчик
Аватар для Salamab
 
Salamab никому не известный тип
Регистрация: 27.04.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

Очень интересная тема, друзья! С недавнего времени увлекаюсь этим. Пробовал сделать то, что вы описываете здесь.. получается тоже самое, что и у товарища ktulx =((((((
  Ответить с цитированием
Старый 27.04.2012, 16:56   #14
 Пехотинец
Аватар для ktulx
 
ktulx на правильном пути
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

тык

Не хочу показаться ещё бОльшим занудой, чем я есть )) но, пожалуйста, кто-нибудь объясните мне, как в этом коде может идти работа с несколькими процессами, если в самом начале процедуры мы получаем хэндл одного окна, PID по этому хэндлу и всё. Пошаговое выполнение программы в делфи показывает, что цикл проходит только один раз.
Изображения
Тип файла: jpg ddd.JPG (162.1 Кб, 68 просмотров)

Последний раз редактировалось ktulx; 27.04.2012 в 17:07.
  Ответить с цитированием
Старый 22.09.2013, 05:43   #15
 Разведчик
Аватар для Gorrilaz
 
Gorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известен
Регистрация: 23.06.2009
Сообщений: 38
Популярность: 392
Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 2 сообщениях
 
По умолчанию Re: (Как?) Получить pIDы нескольких одинаковых процессов?

При проверке выполнения цикла так же получил одно выполнение кода... Проверял на окнах Perfect World.
Получается так, если перейти к окну программы ищется если не перейти то ищет последнее запущенное (или последнее к которому мы переходили).
Есть такое ощущение, что в неактивном окне не выполняется процесс на уровне обмена с видной (т.е. процесс приостанавливается). Бред какой то...
Хотя судя по описанию winapi функции пофиг на окно.
________________
Три рубля много, спасибо хватит!
Запуск и переименование окон PW
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получит весь список процессов ? moloko911 Вопросы и ответы, обсуждения 4 23.11.2011 19:01
[Продам] (Обменяю) Ак на ру1 на 2 с других серверов(одинаковых) Kyzka Dark Orbit 1 11.10.2011 17:14
[Информация] да одинаковых эпик кольца на 1го чара maxxx Читы, баги и статьи по WoW 1 19.12.2009 13:30

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 00:12.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net