![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
бУРов |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Я использую пример программы, которая получает список запущенных процессов (среди них ищет определенный, artv).
Оригинальный код: Taking a Snapshot and Viewing Processes (Windows) я порезал, Теперь в том, что осталось хочу разобраться, что мне ещё может быть не нужно. Например,
Для отдельных процессов выводит в консоль предупреждающее сообщение
Для моего процесса, который я ловлю, такого нет, поэтому хочу понять, нужен ли мне этот кусочек кода? И чем его необходимость j,обусловлена в оригинальном примере? Свма программа:
|
||||||
|
|||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Всё зависит от того, что Вам надо. Если Вам нужен всего один процесс из этого списка, то зачем для каждого делать OpenProcess? Кстати, не ясно, как Вы определяете, Ваш это процесс или нет. Но если Вы делаете OpenProcess хотя бы для одного процесса, то всё равно нужна обработка ошибочных ситуаций (а вдруг OpenProcess завершится неудачно именно для Вашего процесса, как Вы тогда без дополнительного уведомления поймёте, что происходит: процесс вроде есть, а программа его не находит...) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
бУРов |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Спасибо - это ценное замечание.
Предполагается, что имя процесса будет передано как параметр командной строки argv[1]
Мне не совсем понятно, нужен ли мне этот вызов вообще. Пока мне нужно найти в списке "prog.exe" и потом, путь по которому произведен ее запуск. А нужен ли этот вызов мне? |
||||||
|
|||||||
Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Это сообщение отредактировал(а) Dem_max - 25.6.2013, 09:17 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
бУРов |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Dem_max, это что? Первый кусочек кода я помещаю в main?
А второй перед main? Компилится с ошибками. И что это за код? Получить по имени процесса его путь? Это сообщение отредактировал(а) бУРов - 25.6.2013, 10:00 |
|||
|
||||
Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Конкретно да, но можешь что хочешь делать. Я тебе привел пример как получать доступ к процессу и получать о нем информацию. Это сообщение отредактировал(а) Dem_max - 25.6.2013, 10:05 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
бУРов |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Функция SetPrivilege. Она нужна для оого, чтобы "обойти" UAC?
Т.е., после запуска программы, системой мне будет предложен вопрос-предложение можно ли запускать данную программу? |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну да, не под админом может отказать. В принципе можешь попробовать убрать привилегии, но там будут траблы с получением информации от x64 процессах из своего x32 приложения.
Если пользователь один на компе то он и так админ. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
бУРов |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Сейчас у меня вот такая связка
и она работает. Но вопросы остались. Используя в цикле связку CreateToolhelp32Snapshot/Process32First/Process32Next я получаю "снимок" запущенных процессов, и для каждого заполняется структура pe32 с информацией о процессе. А зачем нужен дополнительный вызов OpenProcess? Чтобы получить ещё и hProcess? |
|||
|
||||
Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Дa, так он нужен если нужно получить информацию о процессе, читай ремарку с MSDN
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
бУРов |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Понятно.
А в чем разница между процессом и модулем? Процесс относится к exe-файлу, а модуль к dll-библиотеке? |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну типа того
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
бУРов |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.8.2010 Репутация: нет Всего: нет |
Вот, что у меня получилось.
Хочу сделать, чтобы в бесконечном цикле консольная прога делала "снимки" запущенных процессов. Анализировала и проверяла, есть ли там нужный (передается параметром в командной строке). Пока она не работает, как мне хочется. Запускаю консольную свою программу (эту). Консоль открывается, выводятся пустые строки (видно, как курсор опускается вниз). Запускаю целевую программу, которую ловлю. Начинается вывод ее имени. Закрываю целевую программу, но вывод продолжается. А мне нужно, чтобы прекращался. Что-то с циклами не разберусь никак. Или буфер снимка не очищается? CreateToolhelp32Snapshot должен каждый раз заполняться новым списком.
Это сообщение отредактировал(а) бУРов - 25.6.2013, 14:40 |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
тут же готовый пример есть в чем проблема то ???
http://msdn.microsoft.com/en-us/library/wi...1(v=vs.85).aspx
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Эта строка делает совсем не то, что вы ожидаете. Строки (которые char*) нужно сравнивать специальными функциями (в вашем случае strcmp) Хотя, если у вас ProcName это CString, то работать будет ![]() Кроме того, вот это -
наводит на мысль, что вы наступили на любимые грабли всех новичков, которые впервые столкнулись со студией. Называются эти грабли - UNICODE проект ![]() Это точно. Перенесите ваш printf со строки 41 на строку 38 (поставьте перед breake) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |