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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать имя процесса? 
:(
    Опции темы
Erick
Дата 23.6.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Следующей функцией я вывожу следующую информацию о процессе(запущеный блокнот, калькулятор и т.д.): дескриптор процесса, идентификатор процесса, дескриптор и идентификатор первичного потока, код завершения процесса.
Код

BOOL CALLBACK fDlgInfo(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    PROCESS_INFORMATION *lpPi = NULL;
    HANDLE              hProcess = NULL;
    DWORD               ExitCode = 0;

    switch (uMsg)
    {
    case WM_INITDIALOG:
        {
            lpPi = (PROCESS_INFORMATION*)lParam;
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, lpPi->dwProcessId);
            
            // Prc id, Prc handle
            SetIntText(hwndDlg, IDC_STATIC_PH, (DWORD)lpPi->hProcess);
            SetIntText(hwndDlg, IDC_STATIC_PI, (DWORD)lpPi->dwProcessId);
            // Thr id, Thr handle
            SetIntText(hwndDlg, IDC_STATIC_TH, (DWORD)lpPi->hThread);
            SetIntText(hwndDlg, IDC_STATIC_TI, (DWORD)lpPi->dwThreadId);
            // Prc ExitCode
            if (GetExitCodeProcess(hProcess, &ExitCode))
            {
                if (ExitCode==STILL_ACTIVE)
                {
                    HWND hItem = NULL;
                    hItem = GetDlgItem(hwndDlg, IDC_STATIC_P_EXIT);
                    SendMessage(hItem, WM_SETTEXT, 0L, (LPARAM)"Активен\0");
                } else
                    SetIntText(hwndDlg, IDC_STATIC_P_EXIT, (DWORD)ExitCode);
            } else
            {
                LPVOID lpMsgBuf;
                HWND hItem = NULL;

                FormatMessage( 
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                    FORMAT_MESSAGE_FROM_SYSTEM | 
                    FORMAT_MESSAGE_IGNORE_INSERTS,
                    NULL,
                    GetLastError(),
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                    (LPTSTR) &lpMsgBuf,
                    0,
                    NULL 
                );
                hItem = GetDlgItem(hwndDlg, IDC_STATIC_P_EXIT);
                SendMessage(hItem, WM_SETTEXT, 0L, (LPARAM)lpMsgBuf);
                LocalFree( lpMsgBuf );
            }
            CloseHandle(hProcess);
            return true;
        }
    case WM_COMMAND:
     
    case IDOK:
    case IDCANCEL:{EndDialog(hwndDlg, true);return true;}
    }
    return false;
}

В обработчике WM_COMMAND оконнной процедуры создание диалогового окна будет выглядеть след образом:
Код

///////////////////////////////////////////////////////////////
/////////////////Информация о процессе 0///////////////////////
            case IDM_INFO_P0:
                {
                  DialogBoxParam((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
                        MAKEINTRESOURCE(IDD_PROCESS_INFO), hWnd, fDlgInfo,
                        (LPARAM)&pi[0]);

                }break;
///////////////////////////////////////////////////////////////

Но мне надо, чтобы на это диалоговое окно выводилось и имя процесса(программы). Нипример: Notepad.exe. Как это сделать? Где храниться имя программы(pszApplicationName)? Или всё придётся делать вручную?
PM MAIL   Вверх
Romikgy
Дата 24.6.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Или попробуй GetModuleFileName, или же перебором всего что дает CreateToolhelp32Snapshot с параметром TH32CS_SNAPPROCESS, там в структуре PROCESSENTRY32 есть такая весчь char szExeFile[MAX_PATH]; вот это и есть имя процесса smile
Не знаю как в VC а дельфи и с++ от борланда есть такая весчь Application.ExeName, это по второму вопросу smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Romikgy
Дата 24.6.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Не GetModuleFileName не подойдет , если только процесс не dll !


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
JoyEx
Дата 24.6.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

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



Код

        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName) );
        }




--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Erick
Дата 24.6.2005, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем спасибо, разобрался.
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.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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