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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.80
Игорь98
34 / 34 / 3
Регистрация: 12.02.2010
Сообщений: 239
27.06.2010, 23:28     Узнать PID процесса #1
Подскажите пожалуйста, как узнать PID процесса зная его имя (например explorer'a)!!! Пол интернета перерыл, функции все не рабочие.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,031
13.04.2013, 23:27     Узнать PID процесса #21
Xantrax, интересный ты человек , я тебе выкладываю полностью откомпилированный проект , а ты мне по мимо этого задаёш вопросы , если я его компильнул и программа работает какие проблемы разобраться с кодом ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
432 / 455 / 16
Регистрация: 26.01.2011
Сообщений: 2,031
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
 Аватар для 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,031
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:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru