![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
Привет.
подскажите, пожалуйста, как узнать уникальный идентификатор приложения? В приложение я создаю процесс, которые запускает другое приложение. Как узнать уникальный идентификатор приложения родителя в приложение потомке? |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
Спасибо большое!
|
|||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
В продолжение вопроса:
Когда запускаю из родительского приложения, всё отлично! PID совпадают. Но почему pid, есть даже тогда когда приложение запускается само по себе? Как это отследить? |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
Если оно запущено из explorer'а, то там будет PID explorer'а. Вызвать GetModuleFileNameEx(hParentProcess, NULL, ...), и определить, кто создал процесс. Это сообщение отредактировал(а) 586 - 17.10.2009, 11:34 |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Любой объект ядра полученный через GetCurrentProcess, CreateProcess(???) это Процессо-зависимый ИД!!! Его привести к уникальному можно через юзание DublicateHandle, более того по-моему даже Рихтер сторонник этой ф-ции ;) |
|||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
Извините за тугодумство, но и за чего могут быть такие ошибки?
Error 1 error LNK2001: unresolved external symbol _GetModuleBaseNameA@16 Error 2 error LNK2001: unresolved external symbol _EnumProcessModules@16 Error 3 fatal error LNK1120: 2 unresolved externals
|
|||
|
||||
586 |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
не путай с хендлами (HANDLE). PID - это глобальный идентификатор.
|
||||||
|
|||||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
586, не проснулся еще ))
Вобщем, по-моему наиболее простое решение это: 1) сделать снапшот 2) получить ИД процесса родителя у которого ищут 3) В PROCESSENTRY32 Structure есть DWORD th32ParentProcessID; Добавлено через 8 минут и 53 секунды статья на rsdn.ru Это сообщение отредактировал(а) EvilsInterrupt - 17.10.2009, 12:25 |
|||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
Спасибо ещё раз. Наверное уже достал, но что делать
![]() теперь всё нормально определяет имя, но если я запускаю из своей родительской программы, то
= false, ну и соответственно имя <unknown> ![]() |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
GetLastError() возвращает 0.
|
|||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
А нет я ступил. =87
Не может Handle создать! Какие параметры нужно туда передать? Если нужно чтобы обе программы работали одновременно? Это сообщение отредактировал(а) Veve - 17.10.2009, 14:17 |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
Этот код означает: "Параметр задан неверно." Если проблема в OpenProcess, то попробуй вместо тех флагов указать флаг PROCESS_ALL_ACCESS. И ещё: проверь с помощью диспетчера задач, может PID не тот. |
|||
|
||||
Veve |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: нет Всего: 13 |
Спасибо!
Дело в том, что я запускал родительскую программу из VisualStudio: ctrl+f5 окно оставалось, ну а процесс заканчивался. Соответственно с таким PID больше процесса не оставалось! Это сообщение отредактировал(а) Veve - 17.10.2009, 15:38 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |