Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Givoi от Март 09, 2012, 16:22



Название: Имя процесса по PID windows
Отправлено: Givoi от Март 09, 2012, 16:22
как в винде узнать имя процесса по его PID?


Название: Re: Имя процесса по PID windows
Отправлено: Igors от Март 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);
 


Название: Re: Имя процесса по PID windows
Отправлено: Alex Custov от Март 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);
 


Название: Re: Имя процесса по PID windows
Отправлено: Igors от Март 09, 2012, 18:02
С уникодом согласен но HANDLE все-таки надо закрывать  :)


Название: Re: Имя процесса по PID windows
Отправлено: Alex Custov от Март 09, 2012, 18:38
Ах да, поправил.


Название: Re: Имя процесса по PID windows
Отправлено: Givoi от Март 09, 2012, 19:28
 В  msdn, про GetProcessImageFileName написано что надо подключать Psapi.h, но на семерке при компилирование вылетает ошибка

'::GetProcessImageFileName' has not been declared


Название: Re: Имя процесса по PID windows
Отправлено: Givoi от Март 09, 2012, 19:30
ещё из msdn

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

как это понять? к проекту нужно конектить Kernel32.lib?


Название: Re: Имя процесса по PID windows
Отправлено: Alex Custov от Март 09, 2012, 19:36
Из MSDN:

Minimum supported client Windows XP

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

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

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

Код:
LIBS += -lpsapi

c kernel32 линковка идёт и так, ничего дополнительно прописывать не нужно.


Название: Re: Имя процесса по PID windows
Отправлено: Givoi от Март 09, 2012, 19:40
работает =) большущее спасибо =)