Russian Qt Forum
Октябрь 01, 2024, 20:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Имя процесса по PID windows  (Прочитано 7140 раз)
Givoi
Гость
« : Март 09, 2012, 16:22 »

как в винде узнать имя процесса по его PID?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 09, 2012, 17:12 »

Код
C++ (Qt)
HANDLE proc = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, theProcessID);
if (!proc) return false;
 
char buf[MAX_PATH];
if (::GetProcessImageFileName(proc, buf, sizeof(buf) - 1)) {
...
}
CloseHandle(proc);
 
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Март 09, 2012, 17:54 »

Я бы сказал

Код
C++ (Qt)
   DWORD pid = ...;
 
   HANDLE h = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
 
   if(!h)
       return false;
 
   TCHAR tname[MAX_PATH];
 
   if(!::GetProcessImageFileName(h, tname, sizeof(tname)))
       return false;
 
   QString name = QFileInfo(
#ifdef UNICODE
       QString::fromWCharArray(tname)
#else
       QString::fromUtf8(tname)
#endif
       ).fileName();
 
   ::CloseHandle(h);
 
« Последнее редактирование: Март 09, 2012, 18:39 от Alex Custov » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 09, 2012, 18:02 »

С уникодом согласен но HANDLE все-таки надо закрывать  Улыбающийся
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Март 09, 2012, 18:38 »

Ах да, поправил.
Записан
Givoi
Гость
« Ответ #5 : Март 09, 2012, 19:28 »

 В  msdn, про GetProcessImageFileName написано что надо подключать Psapi.h, но на семерке при компилирование вылетает ошибка

'::GetProcessImageFileName' has not been declared
« Последнее редактирование: Март 09, 2012, 19:39 от Givoi » Записан
Givoi
Гость
« Ответ #6 : Март 09, 2012, 19:30 »

ещё из msdn

Library
Kernel32.lib on Windows 7 and Windows Server 2008 R2;

как это понять? к проекту нужно конектить Kernel32.lib?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Март 09, 2012, 19:36 »

Из MSDN:

Minimum supported client Windows XP

Добавь в pro файл

Код:
DEFINES += _WIN32_WINNT=0x0501 WINVER=0x0501

и нужно линковаться с psapi, для mingw:

Код:
LIBS += -lpsapi

c kernel32 линковка идёт и так, ничего дополнительно прописывать не нужно.
« Последнее редактирование: Март 09, 2012, 19:43 от Alex Custov » Записан
Givoi
Гость
« Ответ #8 : Март 09, 2012, 19:40 »

работает =) большущее спасибо =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 22.