Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Кто запустил программу


Автор: MuForum 19.5.2012, 23:45
Доброго времени суток.


# Вопрос: Каким образом можно узнать, кто запустил мою программу?
- То есть, какая программа родитель запуска моей программы.
- Мне необходимо точно знать, что запуск моей программы был через explorer.exe


# Добавлено: Нашел информацию, что можно узнать PID процесса, который запустил наш процесс.
- (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684839(v=vs.85).aspx)



# Вариант №1: Данная функция позволяет узнать PID процесса, которым была порождена наша программ.
Код

DWORD GetParentProcessID()
{
    DWORD result    = (DWORD)(-1);
    // ----
    HANDLE hCTH    = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if ( hCTH == NULL ) return result;
    // ----
    PROCESSENTRY32 p;
    ZeroMemory( & p, sizeof(p));
    // ----
    p.dwSize    = sizeof(p);
    // ----
    if ( Process32First(hCTH, & p) == 0 )
    {
        CloseHandle(hCTH);
        return result;
    }
    // ----
    DWORD dwCurPID    = GetCurrentProcessId();
    // ----
    do
    {
        if ( p.th32ProcessID == dwCurPID )
        {
            result    = p.th32ParentProcessID;
            break;
        }
    }
    while( Process32Next(hCTH, & p) != 0 );
    // ----
    CloseHandle(hCTH);
    // ----
    return result;
}



P.S. -> Буду рад помощи и подсказкам.

Автор: Dem_max 20.5.2012, 06:33
Вот тут что тебе нужно

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx

Подставляешь свой PID родителя и он тебе распечатает имя процесса запустившего твой процесс

Автор: MuForum 20.5.2012, 10:02
Цитата(Dem_max @ 20.5.2012,  06:33)
Вот тут что тебе нужно

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx

Подставляешь свой PID родителя и он тебе распечатает имя процесса запустившего твой процесс

Благодарю за ответ, но метод на который вы дали ссылку просто распечатывает PID процесса и его имя.

# Добавлено:
- В первом сообщение я выложил функцию которая возвращает PID процесса, который породил наш процесс.
- Остаётся только проверить чтобы имя процесса было explorer.exe и проверить чтобы у этого процесса не было процесса, который его породил.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)