C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
PathExe, Есть Handle надо PathExe етого процеса
Duch
Отправлено: 11.03.2004, 02:30


Ученик-кочегар

Группа: Участник
Сообщений: 4



Получен Handle некоторой главной формы, мне надо получить DOS путь к ехе который создал эту форму.

Мне надо побольше информации о программе (чтото кроме GetClassName, GetWindowText), так чтоб я мог различать программы между собой, для того чтоб вести учёт запущеных програм.

Зарание спасиба (Builder6.0)
Gedeon
Отправлено: 11.03.2004, 10:06


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Duch @ 11/03/2004, 03:32)
так чтоб я мог различать программы между собой, для того чтоб вести учёт запущеных програм.

Мне кажется вы пошли от обратного, для учета запущенных программ не лучше ли получить список процессов в системе, а не по окну определять приложение, ведь оно может и не иметь окна.
Duch
Отправлено: 11.03.2004, 14:37


Ученик-кочегар

Группа: Участник
Сообщений: 4



Дело в том, что я пишу программу, которая считает с каким приложением и сколько работает пользователь, поэтому мне надо именно активное приложение. А большинство программ зачастую меняют свой GetWindowText, а Classname, у многих одинаковый, поэтому мне нужны дополнительные критерии для распознавания, такие чтоб, однажды распознав приложение, больше нисчем его не путать (даже после перезагрузки, поэтому ProcessID не катит).
klen
Отправлено: 12.03.2004, 02:35


Машинист паровоза

Группа: Участник
Сообщений: 239



Я тоже не понимаю зачем так мучится.
Если работешь под NT подобными системами то получаешь список процессов, выбираешь те которые интересуют, определяешь пользователя под которым они запущены, функциями GetProcessTime определяешь скоко процессорного времени сьел пользователь.
Также можно определить врмя старта заданного процесса.
В 95 подобных системах эти функции не реализованы, надо виртуальныйе драйверы ставить atm.vxd например, тогда также все будет как в NT/

Ну аели ты хочешь по свойму сделать — барабан на шею, в помощь
GetClassInfoEx
GetClassLong
GetClassName
GetClassWord
GetWindowLong
GetWindowWord
Duch
Отправлено: 12.03.2004, 17:46


Ученик-кочегар

Группа: Участник
Сообщений: 4



Поскольку я не нашол (по крайней мере в Buildere6.0) GetProcessTime которая кстати былабы решением всех моих проблем, то вот, что я придумал:
С помощью tlhelp32.h делаю snapshot системы
отсюда я легко получаю все просесы, их ID и ехе-name. Есть есче одно большое приимущество — proc.th32ParentProcessID позволяет проследить кем был запущен процес, тоесть я могу отфильтровывать процесы которые породила сама система — сервисы.
Мне нада считать время только для активного приложения, поэтому делаю
hMane=GetTopWindow();
do{GetWindow(hMane, GW_OWNER); }while;
до тех пор пока не вернется false
потом хочу получить ID процеса по Handle с помощью
GetWindowThreadProcessId(hMane,NULL);
а он мне возвращает такой ID которого нет ни для оного процеса полученого с помощью snapshot

Вопрос почему у одного и тогоже процеса полученые резными способами ID разные ?!?!?!?!

ЗЫ: стоит у меня ХР но конечно хотелосьбы чтоб прога рабатала и под NT

Вернуться в Вопросы программирования в C++Builder