Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.80
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
#1

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 22:56 #16
Вот смотри накидал проект на скорую руку , вводишь название процеса и выдаётся пид , причём если с таким именем найденно несколько процессов , то все их пиды покажит.
Вложения
Тип файла: rar Project1.rar (107.6 Кб, 57 просмотров)
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
13.04.2013, 23:09 #17
Игорь, мне зачем нужна программа?
Меня волнует строчка в которой сравнивается имя процесса (AProcessName) и значение структуры PROCESSENTRY32 характеризующее имя текущего процесса (получается с помощью ProcessEntry.szExeFile). Так вот, у меня не совпадение форматов данных.
Хорошо, давайте сделаем как написано у вас в main.cpp
C++
1
2
3
4
5
6
if(strcmp(ProcessEntry.szExeFile,AProcessName)==0)
        {
            pid = ProcessEntry.th32ProcessID;
            CloseHandle(pHandle);
            return pid;
        }
Тогда ошибка такая: cannot convert parameter 2 from 'WCHAR *' to 'const char *
Как мне разобраться с этой бедой?
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 23:12 #18
В программе всё есть - отрывай и изучай , но если -

Цитата Сообщение от Xantrax Посмотреть сообщение
Игорь, мне зачем нужна программа?
отписываюсь от темы.
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
13.04.2013, 23:20 #19
Игорь, с чего вы взяли, что я не посмотрел вашу программу?
Я же привел пример того блока программы, который меня интересует переделанный на ваш лад (пример). Но с ним у меня тоже проблема форматов..
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 722
13.04.2013, 23:26 #20
Цитата Сообщение от Xantrax Посмотреть сообщение
Функция не может сконвертировать указатель типа WCHAR в указатель типа const char...
сконвертируйте за неё (только не указатель, а соберите новые данные типа char*) из WCHAR и скормите их функции
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 23:27 #21
Xantrax, интересный ты человек , я тебе выкладываю полностью откомпилированный проект , а ты мне по мимо этого задаёш вопросы , если я его компильнул и программа работает какие проблемы разобраться с кодом ?
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
13.04.2013, 23:32 #22
Вот результат программы
Миниатюры
Узнать PID процесса  
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
14.04.2013, 00:34 #23
сконвертируйте за неё (только не указатель, а соберите новые данные типа char*) из WCHAR и скормите их функции
Что значит данные типа char? char - один символ, как его скормить функции? Вообще именно в этом я и просил помощи...
А вообще, можнт программе просто передать CString? Но опять же он не будет совпадать с const char
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 722
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';
а то не хорошо будет в общем случае
Xantrax
17 / 17 / 1
Регистрация: 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....
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
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;
}
Xantrax
17 / 17 / 1
Регистрация: 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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 20:28
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.04.2013, 20:28
Ответ Создать тему
Опции темы

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