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

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

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

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

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

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

C++ Запуск процесса из С++
C++ Возможно ли безопасно упаковать в одну переменную pid и tid в windows?
Как узнать имя запущенного процесса C++
Библиотеки процесса, защита от изменения процесса C++
C++ Как узнать состояние дочернего процесса

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

Или воспользуйтесь поиском по форуму:
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
14.04.2013, 20:28     Узнать PID процесса #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);
}
Yandex
Объявления
14.04.2013, 20:28     Узнать PID процесса
Ответ Создать тему
Опции темы

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