Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#31: 2011-05-11 14:25:36 ЛС | профиль | цитата
А вдруг заработает нормально с классическим API, надо попробовать. Хотя сильно сомневаюсь. AFAIK, весь инструментальный API подглючивает то тут, то там из-за виртуализации в 64 битных.
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#32: 2011-05-11 14:31:02 ЛС | профиль | цитата
Ivann, у тебя в примере есть огоромный минус -- ищется родительский идентификатор только для текущего процесса, а нужен для любого
карма: 22

0
Ответов: 3889
Рейтинг: 362
#33: 2011-05-11 14:33:51 ЛС | профиль | цитата
Из соседней темы
1nd1g0 писал(а):
В паре компонент манипуляции процессов не реализованы эти функции, хотя библиотеки, в принципе, позволяют. В том же WMI не обрабатывается запрос к базе ParentProcessID, в EnumProcess используется tlhelp32, но не реализованы функции чтения части структуры данных процесса - th32ParentProcessID. А ведь довольно нужная функция, если подумать.

------------ Дoбавленo в 14.33:
Я же не зря всё время в Tlhelp32(toolhelp32) тыкаю пост за постом. Там немного муторно процессы перечислять и структуру с информацией о них анализировать, но вполне юзабельно всё. И читать память процесса тоже можно функцией со страшным именем "Toolhelp32ReadProcessMemory", помню, тут кто-то спрашивал)
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#34: 2011-05-11 14:52:50 ЛС | профиль | цитата
1nd1g0, не прокатило чтение поля th32ParentProcessID, выдает нулевой ID на любой запущенный процесс
карма: 22

0
Ответов: 3889
Рейтинг: 362
#35: 2011-05-11 14:56:20 ЛС | профиль | цитата
nesco, а можно код глянуть? Не то, чтобы я кого-то учить собираюсь, просто сравнить с моими мыслями на тему...
карма: 1

0
Ответов: 3349
Рейтинг: 233
#36: 2011-05-11 14:58:29 ЛС | профиль | цитата
code_23851.txt
карма: 1

0
файлы: 1code_23851.txt [3.8KB] [296]
Разработчик
Ответов: 26066
Рейтинг: 2120
#37: 2011-05-11 15:11:58 ЛС | профиль | цитата
1nd1g0 писал(а):
а можно код глянуть?

В EnumProcess структура PROCESSENTRY32 заполняется уже, оттуда и читаю th32ProcessID и th32ParentProcessID
------------ Дoбавленo в 15.00:
Ivann, копаем в сторону чтения структуры PROCESSENTRY32, не добавляя лишних сущностей, тк эта структура уже есть в EnumProcess
------------ Дoбавленo в 15.02:
1nd1g0, подставь в EnumProcess, вместо



procedure ThiEnumProcess._var_CurrentID;
begin
dtInteger(_Data, procEntry.th32ProcessID);
end;

вот это



procedure ThiEnumProcess._var_CurrentID;
begin
dtInteger(_Data, procEntry.th32ParentProcessID);
end;

Должно выдавать ID родительского процесса, а выдает ноль
------------ Дoбавленo в 15.11:
Ivann, твой код не откроет порождающий процесс, если у тебя не будет привелегий
карма: 22

0
Ответов: 3889
Рейтинг: 362
#38: 2011-05-11 15:48:16 ЛС | профиль | цитата
Ну что сказать, прямо сейчас буду пытаться заставить работать свой VBScript в HiAsm, опрашивать базу WMI, там тоже есть поле ParentProcessID. Тут ещё HiAsm регулярно вылетает с OutOfMemory, пока скрипт писать пытаюсь. У кого опыт VBS в HiAsm, какие особенности помимо обязательного соблюдения парадигмы функций и имён? У меня даже парсить не начинает, ошибку синтаксиса выдаёт на создании экземпляра объекта set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Хотя в отдельном .vbs файле за милую душу у меня работает.
карма: 1

0
Ответов: 245
Рейтинг: 3
#39: 2011-05-11 15:53:18 ЛС | профиль | цитата
первая схема Ivann на windows 7 x64 работает.. только определяется родительский процесс текущей программы как я понял... а надо стороней

все остальные две схемы включая nesco не работают
карма: 0

0
Ответов: 3889
Рейтинг: 362
#40: 2011-05-11 15:56:12 ЛС | профиль | цитата
[offtop]Меня этот редактор VBS в HiAsm задолбал. 2 Гб оперативной памяти при закрытии выделяет себе, потом память кончается, Out Of Memory и так до очередной попытки выйти из редактора. Потерял три раза исходники не дождавшись конца памяти. Всё, ну его далеко и на долго)[/offtop]
карма: 1

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#41: 2011-05-11 16:07:41 ЛС | профиль | цитата
goluzov писал(а):
все остальные две схемы включая nesco не работают

Это проблема EnumProcess под Win7 x64.
Тк как вторая схема Ivann-a построена на принципе первой, то, похоже, добиться получения родительского процесса не своего приложения в x64 крайне проблематична из-за отсутствия таковой у разработчиков.
Возможно, у Ivann-a есть 64-я Win7 и он сможет добиться положительного результата

карма: 22

0
Ответов: 3349
Рейтинг: 233
#42: 2011-05-11 16:07:46 ЛС | профиль | цитата
code_23852.txt
карма: 1

1
файлы: 1code_23852.txt [1.6KB] [197]
Голосовали:1nd1g0
Разработчик
Ответов: 26066
Рейтинг: 2120
#43: 2011-05-11 16:11:00 ЛС | профиль | цитата
Ivann, это уже лучше. Но это требует перебора всех процессов, а как бы это дело воткнуть в EnumProcess к уже полученному th32ProcessId
карма: 22

0
Ответов: 3349
Рейтинг: 233
#44: 2011-05-11 16:13:39 ЛС | профиль | цитата
[b]nesco[/b],
#pas
procEntry.th32ProcessID := PIDArray[I];
//А кто родителя запишет???
карма: 1

1
Голосовали:nesco
Ответов: 3889
Рейтинг: 362
#45: 2011-05-11 16:20:01 ЛС | профиль | цитата
Ко ВСЕМ с ОС 64 bit, у Вас HiAsmElementsDelphiExampleSystemWMIProcessInfo.sha (code_23853.txt)

Нормально работает, все процессы показывает? Даже 64 битные? Все поля?
------------ Дoбавленo в 16.20:
И как работает последний пример уважаемого Ivann?
карма: 1

0
файлы: 1code_23853.txt [1.5KB] [281]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)