Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.80
Игорь98
35 / 35 / 5
Регистрация: 12.02.2010
Сообщений: 239
#1

Узнать PID процесса - C++

27.06.2010, 23:28. Просмотров 11180. Ответов 26
Метки нет (Все метки)

Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer'a)!!! Пол интернета перерыл, функции все не рабочие.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 23:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Узнать PID процесса (C++):

Как узнать Handle или PID процесса, зная его имя и класс?
Как узнать Handle или PID процесса, зная его имя и класс?

Получить имя или pid родительского процесса
Имеется имя файла И pid процесса. Нужно узнать имя файла ИЛИ pid его родителя Добавлено через 3 минуты Если такой возможности нет,...

Узнать id родителя процесса
Как узнать id родителя процесса? Нашел информацию что можно вывести из структуры PROCESSENTRY32. Можно пример? Гугл выдает только как...

Как узнать имя запущенного процесса
Как узнать имя запущенного процесса и записать его имя в строку (LPWSTR)?

Как узнать состояние дочернего процесса
Здравствуйте. Есть приложение, которое запускает разные дочерние процессы. Мне нужно узнавать, когда дочернее приложение завершилось. Я бы...

Библиотеки процесса, защита от изменения процесса
Здраствуйте. 1) Как можно получить список библиотек (dll, asi), которые уже загружены в процесс какой-то программы? Мне нужно чекать...

26
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
13.04.2013, 23:27 #21
Xantrax, интересный ты человек , я тебе выкладываю полностью откомпилированный проект , а ты мне по мимо этого задаёш вопросы , если я его компильнул и программа работает какие проблемы разобраться с кодом ?
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
13.04.2013, 23:32 #22
Вот результат программы
0
Миниатюры
Узнать PID процесса  
Xantrax
19 / 19 / 2
Регистрация: 28.11.2012
Сообщений: 328
14.04.2013, 00:34 #23
сконвертируйте за неё (только не указатель, а соберите новые данные типа char*) из WCHAR и скормите их функции
Что значит данные типа char? char - один символ, как его скормить функции? Вообще именно в этом я и просил помощи...
А вообще, можнт программе просто передать CString? Но опять же он не будет совпадать с const char
0
abit
272 / 271 / 83
Регистрация: 03.02.2013
Сообщений: 770
14.04.2013, 00:53 #24
Что значит данные типа char? char - один символ, как его скормить функции? Вообще именно в этом я и просил помощи...
я написал char*, это не символ, а указатель

в общем поступите так, если совсем не знаете...
C++
1
2
3
   wchar_t* myWCHAR = L"A wide character string.";
   char* mychars = new char[wcslen(myWCHAR) + 1];
   wcstombs( mychars, myWCHAR, wcslen(myWCHAR) );
и скормите ей mychars, это будет нужный для неё указатель )

Добавлено через 4 минуты
ещё дополнение...

C++
1
2
3
4
   wchar_t* myWCHAR = L"A wide character string.";
   char* mychars = new char[wcslen(myWCHAR) + 1];
   wcstombs( mychars, myWCHAR, wcslen(myWCHAR) );
   mychars[wcslen(myWCHAR)]='\0';
а то не хорошо будет в общем случае
0
Xantrax
19 / 19 / 2
Регистрация: 28.11.2012
Сообщений: 328
14.04.2013, 01:18 #25
если я его компильнул и программа работает какие проблемы разобраться с кодом ?
Понимаете Игорь, быть может я и не прав, но я считаю, что специфика написания консольной программы C++ и GUI программы на Visual C++ с использованием библиотеки MFC, немного разная. В вашей программе вы не употребляете такие классы, которые употребляю я, соответственно в моем проекте она бесполезна. Да, общий принцип написания из нее понять можно, но общий принцип и в моей программе был, меня интересовали частности.

Вот так у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DWORD CMainPWDlg::PidByName(CString AProcessName)
{
    HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 ProcessEntry;
    DWORD pid;
    ProcessEntry.dwSize = sizeof(ProcessEntry);
    BOOL Loop = Process32First(pHandle,&ProcessEntry);
    while(Loop)
    {
        if(strcmp(ProcessEntry.szExeFile,AProcessName)==0)
        {
            pid = ProcessEntry.th32ProcessID;
            CloseHandle(pHandle);
            return pid;
        }
        Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}
Добавлено через 7 минут
Ммм, теперь еще нужно сконвертировать DWORD в LPCSTR.
CString str;
str = L"notepad.exe";
/*PidByName(str);*/
DWORD nameprocess;
nameprocess = PidByName(str);
str.Empty();
str.Format(L"PID процесса блокнот: %d", nameprocess);
MessageBox(str,L"Информация",MB_OK|MB_ICONINFORMATION); /*вот тут ошибка конвертирования const wchar_t[11] в LPCSTR*/
Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void CMainPWDlg::OnBtnClickedStart()
{
    CString str;
    str = L"notepad.exe";
    /*PidByName(str);*/
    DWORD nameprocess;
    nameprocess = PidByName(str);
    /*WCHAR sz[10];
    swprintf(sz,10,L"%d",nameprocess);*/
    str.Empty();
    str.Format(L"PID процесса блокнот: %d", nameprocess);
    MessageBox(str,L"Информация",MB_OK|MB_ICONINFORMATION);
}
Не могу вывести DWORD значение в MessageBox....
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
14.04.2013, 17:30 #26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdlib>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    
    DWORD dw=15;
char Mas[10];
 
itoa(dw,Mas,10);
 
MessageBoxA(0,Mas,"Info",MB_OK);    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
1
Xantrax
19 / 19 / 2
Регистрация: 28.11.2012
Сообщений: 328
14.04.2013, 20:28 #27
itoa(dw,Mas,10);
MessageBoxA(0,Mas,"Info",MB_OK);
Что-то у меня то ли руки кривые, то ли я дурак...
Ну, во-первых, itoa' was declared deprecated, но это warning черт с ним.
Во-вторых: CWnd::MessageBoxA' : function does not take 4 arguments
А при MessageBox(0,sz,L"Информация",MB_OK); у меня вообще приложение не хочет открываться...

Добавлено через 7 минут
Я с этими кодировками с ума сойду, у меня и обычный MessageBox(L"Тест",L"",MB_OK); не работает ((
Пишет, что CWnd::MessageBoxA' : cannot convert parameter 1 from 'const wchar_t [5]' to 'LPCTSTR
Что делать?

Добавлено через 18 минут
Ну, вот, вроде бы заработало, однако как чего с кодировками я так и не разобрался...((
C++
1
2
3
4
5
6
7
8
9
10
void CMainPWDlg::OnBtnClickedStart()
{
    CString str;
    str = L"notepad.exe";
    DWORD nameprocess;
    nameprocess = PidByName(str);
    char sz[20];
    itoa(nameprocess,sz,10);
    MessageBox(sz, "sdfsfs", MB_OK);
}
0
14.04.2013, 20:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 20:28
Привет! Вот еще темы с решениями:

Возможно ли безопасно упаковать в одну переменную pid и tid в windows?
Какой диапазон имеют валидные значения pid и tid?

Узнать PID процесса
Так я узнаю PID процесса, - unsigned long PIDByName(AnsiString AProcessName) { HANDLE pHandle =...

Как узнать состояние процесса по PID?
Доброго времени суток, подскажите как можно узнать запущен ли процесс или не запущен если я знаю его PID (process id). В линукс вроде...

Как узнать заголовок окна по PID процесса
Тут Я скрываю окно по Заголовку программы. У меня не большой вопрос как узнать Заголовок окна на PID процесса? Просто Заголовок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru