| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Как получить Handle или ID процесса |
| Автор: Madest 28.10.2004, 16:55 |
| Копался на форуме долго, но этого не нашел. |
| Автор: Mad 28.10.2004, 17:07 |
| Madest Посмотри в MSDN описание CreateToolhelp32Snapshot |
| Автор: Step 28.10.2004, 17:11 |
| http://forum.vingrad.ru/index.php?showtopic=31371 |
| Автор: Mad 28.10.2004, 17:14 |
| Step Не совсем так. Там обсуждается получение ID по HANDLE, а человека интересует по имени процесса |
| Автор: Step 28.10.2004, 17:21 | ||
| Mad, к сожелению почемуто получаеться что наши посты ведут себя как конфликтующее и вот эти в том числе ты сам что предложил вот это CreateToolhelp32Snapshot ну будет у тебя снимок.... и потом ты будешь искать по имени в этом снимке а в той теме уже есть код обработки снимка, осталось его только скорректировать... Добавлено @ 17:25
|
| Автор: Goldberg 28.10.2004, 17:25 |
| Посмотри - Process::GetProcessesByName |
| Автор: Step 28.10.2004, 17:32 | ||
| Madest, интересная задача.. давайте разберемся
по имени приложения или процесса... все предложенные варианты были про имя процесса если необходимо по имени приложения то необходимо получать хендл окна этого приложения и танцевать от него |
| Автор: Madest 29.10.2004, 09:01 | ||
http://forum.vingrad.ru/index.php?showtopic=22801&hl=mysql
Задержка - по закрытию окна "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 - пишет мне компилятор. |
| Автор: Step 29.10.2004, 11:50 |
| по привиденному мной коду вы можете перебрать все процессы, и сравнить имена, получив пид процесса вы открываете его пид-у и получаете хендл.... и делайте то что сможете |
| Автор: Madest 29.10.2004, 13:38 | ||
Осталось немного =)
По имени отловить не получилось, поймал по родительскому pi.dwProcessId("setup.exe") целых два. Там еще _isdel.exe появляется. Но мимо задержки проскакивает из-за того что хендл как-то неправильно получаю. Чего не так? |
| Автор: Madest 29.10.2004, 13:58 |
| Хендл на второй процесс получаю, т.е. он не равен NULL, но с ним WAitForSingleObject не ждет. Кстати, pe32.szExeFile какие-то странные: у первого [System Process], у второго System. |
| Автор: Step 29.10.2004, 14:11 |
| WAitForSingleObject ищи чтото другое, имхо это не подходит к твой задачи... |
| Автор: Madest 29.10.2004, 14:21 |
| Другое что? Процесс или функцию? Если функцию, то какую приблизительно? =) Горе мне, горе... А может таки можно как-нить заставить работать код с окном "setup complete" без MessageBox? |
| Автор: Goldberg 29.10.2004, 22:08 | ||||
#using <mscorlib.dll> #using <System.dll> Добавлено @ 22:13
|
| Автор: Madest 2.11.2004, 12:47 | ||
| Goldberq, что-то не подрубается ничего =( if(pe32.th32ParentProcessID==pi.dwProcessId) - давало не то что мне нужно. Ну а вот что я сделал:
Но вот следующее условие if(pe32.szExeFile=="_INS5176._MP") не срабатывает, хотя передо мной код и MessageBox с "_INS5176._MP - они совпадают по названию! Попробовал банально if(pe32.szExeFile=="MSDEV.EXE") - тоже ничего! Как сравнивать имя процесса в таскменеджере и pe32.szExeFile. Скоро сойду с ума. |
| Автор: Step 2.11.2004, 13:04 | ||
| сравнивай не строчки а области памяти memcmp, или чето такое szExeFile - это не строка, а указатель на страку типа char a[]="_INS5176._MP"; memcmp((void*)a,(void*)pe32.szExeFile,12);
|
| Автор: Madest 2.11.2004, 13:19 |
| Действительно указатель =) Совсем я тавой-то. Правда не умею сравнивать указатель строку =( Но это уже проще. |
| Автор: Madest 2.11.2004, 14:16 | ||
WaitForSingleObject не работает =( Но уже по нужному процессу пытаюсь затормозить. |
| Автор: Step 2.11.2004, 14:25 |
| WaitForSingleObject - тормозит твой процесс но ни как не другой.... а первый параметр это чучуть не тот хендл о котором ты думаешь.... это переменная по которой стработает поковыряйтесь вот в этом DebugActiveProcess может найдете чтото |
| Автор: Madest 2.11.2004, 14:49 |
| Может мы не поняли друг друга? Мне и нужно мою программу затормозить, пока не отработает до конца setup.exe MYSQL. Кстати, поменяв в OpenProceess() PROCESS_QUERY_INFORMATION на PROCESS_ALL_ACCESS моя программа останавливается, но не продолжает работать по завершению ожидаемого процесса. Вот. |
| Автор: Step 2.11.2004, 16:14 |
| Madest, внатури не поняли.. тебе прямяком в факю надо, там помоему подобное было... |
| Автор: Атос 6.11.2004, 10:26 |
| упс.... |