|
(Как?) Получить pIDы нескольких одинаковых процессов? - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
23.04.2012, 23:07
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 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
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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пасибо:
|
|
24.04.2012, 07:58
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 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
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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
|
|
|
|
Пехотинец
|
Регистрация: 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
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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
|
|
|
|
Пехотинец
|
Регистрация: 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
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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
|
|
|
|
Пехотинец
|
Регистрация: 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
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
|
Re: (Как?) Получить pIDы нескольких одинаковых процессов?
Два или три - результат тот же
|
|
|
26.04.2012, 22:31
|
#12
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
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
|
|
|
|
Разведчик
|
Регистрация: 27.04.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: (Как?) Получить pIDы нескольких одинаковых процессов?
Очень интересная тема, друзья! С недавнего времени увлекаюсь этим. Пробовал сделать то, что вы описываете здесь.. получается тоже самое, что и у товарища ktulx =((((((
|
|
|
27.04.2012, 16:56
|
#14
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2011
Сообщений: 70
Популярность: 24
Сказал(а) спасибо: 45
Поблагодарили 7 раз(а) в 7 сообщениях
|
Re: (Как?) Получить pIDы нескольких одинаковых процессов?
тык
Не хочу показаться ещё бОльшим занудой, чем я есть )) но, пожалуйста, кто-нибудь объясните мне, как в этом коде может идти работа с несколькими процессами, если в самом начале процедуры мы получаем хэндл одного окна, PID по этому хэндлу и всё. Пошаговое выполнение программы в делфи показывает, что цикл проходит только один раз.
Последний раз редактировалось ktulx; 27.04.2012 в 17:07.
|
|
|
22.09.2013, 05:43
|
#15
|
|
|
|
Разведчик
|
Регистрация: 23.06.2009
Сообщений: 38
Популярность: 392
Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 2 сообщениях
|
Re: (Как?) Получить pIDы нескольких одинаковых процессов?
При проверке выполнения цикла так же получил одно выполнение кода... Проверял на окнах Perfect World.
Получается так, если перейти к окну программы ищется если не перейти то ищет последнее запущенное (или последнее к которому мы переходили).
Есть такое ощущение, что в неактивном окне не выполняется процесс на уровне обмена с видной (т.е. процесс приостанавливается). Бред какой то...
Хотя судя по описанию winapi функции пофиг на окно.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:12.
|
|