Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить Handle или ID процесса, по имени в TaskManager 
:(
    Опции темы
Madest
Дата 28.10.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Копался на форуме долго, но этого не нашел.
--------------------
PM MAIL   Вверх
Mad
Дата 28.10.2004, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Madest
Посмотри в MSDN описание CreateToolhelp32Snapshot



--------------------
user posted image
PM MAIL   Вверх
Step
Дата 28.10.2004, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25





--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Mad
Дата 28.10.2004, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Step
Не совсем так.
Там обсуждается получение ID по HANDLE, а человека интересует по имени процесса :)


--------------------
user posted image
PM MAIL   Вверх
Step
Дата 28.10.2004, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



Mad, к сожелению почемуто получаеться что наши посты ведут себя как конфликтующее и вот эти в том числе

ты сам что предложил вот это CreateToolhelp32Snapshot

ну будет у тебя снимок.... и потом ты будешь искать по имени в этом снимке

а в той теме уже есть код обработки снимка, осталось его только скорректировать...
Добавлено @ 17:25
Код
HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
 PROCESSENTRY32 pe32.dwSize = sizeof( pe32 );
 if Process32First( hSnapshot, &pe32 )
 {
    do
    {
     //тут надо сравнить поле szExeFile структуры PROCESSENTRY32 с интересующим вас именем и в случае совподения запомнить pe32.th32ProcessID таким образом вы получети ПИД
     } while( Process32Next( hSnapshot, pe32 ) );
 }
 CloseHandle( hSnapshot );



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Goldberg
Дата 28.10.2004, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 3.6.2004

Репутация: нет
Всего: нет



Посмотри - Process::GetProcessesByName


--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Step
Дата 28.10.2004, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



Madest, интересная задача..

давайте разберемся

Цитата
по имени в TaskManager


по имени приложения или процесса...

все предложенные варианты были про имя процесса
если необходимо по имени приложения то необходимо получать хендл окна этого приложения и танцевать от него


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Madest
Дата 29.10.2004, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



http://forum.vingrad.ru/index.php?showtopic=22801&hl=mysql
Код
//AfxMessageBox("Таинственный MessageBox");
CWnd hwnd;
do
{
hwnd.FindWindow(NULL,"Setup complete");
}
while(!hwnd);
while(IsWindow(hwnd));

Задержка - по закрытию окна "Setup complete". Это в API было. Кстати, не всегда срабатывало. А сейчас пишу свой инсталлятор программы с MFC - вообще не работает. Причем если раскомментировать MessageBox все четко срабатывает. Чудеса да и только =) Что он такого делает - мне не въехать. А не работет вот в каком смысле: процесс "setup.exe" запускается, а "_INS5176_._MP" (вот оно имя процесса найденное в таскменеджере) нет. Мне б найти его ID или сразу HANDLE чтоб затормозить.

Процесс "_INS5176_._MP" не запускается при наличии привиденного выше кода про окно. Т.е. хочу получить HANDLE и тормозить через WaitForSingleObject().
Начальство строго запретило наличие таинственных MessageBox-ов в инсталяшке =)

Goldberq, 'Process' : is not a class or namespace name - пишет мне компилятор.

Это сообщение отредактировал(а) Madest - 29.10.2004, 09:14
--------------------
PM MAIL   Вверх
Step
Дата 29.10.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



по привиденному мной коду вы можете перебрать все процессы, и сравнить имена, получив пид процесса вы открываете его пид-у и получаете хендл.... и делайте то что сможете


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Madest
Дата 29.10.2004, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Осталось немного =)
Код
if(Process32First(hSnapshot,&pe32))
{
do
{
if(pe32.th32ParentProcessID==pi.dwProcessId)
{
AfxMessageBox("aga");
HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
if(!hp) AfxMessageBox("no handle");
WaitForSingleObject(hp,INFINITE);
}
}
while(Process32Next(hSnapshot,&pe32));
}
CloseHandle(hSnapshot);

По имени отловить не получилось, поймал по родительскому pi.dwProcessId("setup.exe") целых два. Там еще _isdel.exe появляется. Но мимо задержки проскакивает из-за того что хендл как-то неправильно получаю. Чего не так?

--------------------
PM MAIL   Вверх
Madest
Дата 29.10.2004, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Хендл на второй процесс получаю, т.е. он не равен NULL, но с ним WAitForSingleObject не ждет. :stena :stena :stena
Кстати, pe32.szExeFile какие-то странные: у первого [System Process], у второго System.

Это сообщение отредактировал(а) Madest - 29.10.2004, 14:02
--------------------
PM MAIL   Вверх
Step
Дата 29.10.2004, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



WAitForSingleObject ищи чтото другое, имхо это не подходит к твой задачи...


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Madest
Дата 29.10.2004, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Другое что? Процесс или функцию? Если функцию, то какую приблизительно? =) Горе мне, горе... А может таки можно как-нить заставить работать код с окном "setup complete" без MessageBox?
--------------------
PM MAIL   Вверх
Goldberg
Дата 29.10.2004, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 3.6.2004

Репутация: нет
Всего: нет



Цитата(Madest @ 29.10.2004, 10:01)
Goldberq, 'Process' : is not a class or namespace name - пишет мне компилятор.

#using <mscorlib.dll>
#using <System.dll>

Добавлено @ 22:13
Код

#using <mscorlib.dll>
#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;

int main() {
   // Get the current process.
   Process* currentProcess = Process::GetCurrentProcess();

   // Get all instances of Notepad running on the local
   // computer.
   Process* localByName[] = Process::GetProcessesByName(S"notepad");

   // Get all instances of Notepad running on the specific
   // computer.
   // 1. Using the computer alias (do not precede with "\\").
   Process* remoteByName[] = Process::GetProcessesByName(S"notepad", S"myComputer");

   // 2. Using an IP address to specify the machineName parameter.
   Process* ipByName[] = Process::GetProcessesByName(S"notepad", S"169.0.0.0");

   // Get all processes running on the local computer.
   Process* localAll[] = Process::GetProcesses();

   // Get all processes running on the remote computer.
   Process* remoteAll[] = Process::GetProcesses(S"myComputer");

   // Get a process on the local computer, using the process id.
   Process* localById = Process::GetProcessById(1234);

   // Get a process on a remote computer, using the process id.
   Process* remoteById = Process::GetProcessById(2345, S"myComputer");
}


--------------------
Вот такая у меня привычка, браться за задание, о выполнение которого я изначально не имею никакого представления.
PM MAIL ICQ   Вверх
Madest
Дата 2.11.2004, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Goldberq, что-то не подрубается ничего =(

if(pe32.th32ParentProcessID==pi.dwProcessId) - давало не то что мне нужно.
Ну а вот что я сделал:
Код
if(Process32First(hSnapshot,&pe32))
{
do
{
MessageBox(NULL,pe32.szExeFile,"",MB_OK);//здесь он перечисляет мне все процессы,
//включая и злополучный _INS5176._MP
if(pe32.szExeFile=="_INS5176._MP")
{
AfxMessageBox("aga");
HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
if(!hp) AfxMessageBox("no handle");
WaitForSingleObject(hp,INFINITE);
}
}
while(Process32Next(hSnapshot,&pe32));
}
CloseHandle(hSnapshot);

Но вот следующее условие if(pe32.szExeFile=="_INS5176._MP") не срабатывает, хотя передо мной код и MessageBox с "_INS5176._MP - они совпадают по названию! Попробовал банально if(pe32.szExeFile=="MSDEV.EXE") - тоже ничего! Как сравнивать имя процесса в таскменеджере и pe32.szExeFile. Скоро сойду с ума.
:stena :stena :stena :stena :stena :stena :stena :stena :stena :stena :stena :stena :stena
--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.