Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
#1

Поиск процесса по имени - C++

24.12.2013, 12:11. Просмотров 1144. Ответов 17
Метки нет (Все метки)

Нужно написать функцию которая будет искать запущен ли процесс (имя процесса за ранние известно).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 12:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск процесса по имени (C++):

Поиск студента по имени, фамилии и iq - C++
Нужно в класс Группа студентов дописать методы поиска студента по имени, по фамилии или по iq, помогите, пожалуйста с этим. Написал все,...

Поиск строки в памяти запущенного процесса и её изменение - C++
Подскажи пожалуйста, что я делаю не так. Вот мой код. #include "windows.h" #include <iostream> using namespace std; int...

Поиск введеных имени и фамилии в файле - C++
3 программы) помогите пожалуйста написать их на с++))сам я в с++ не очень шарю..и если можно пожалуйста с комментами)) 1.Имеется...

Нужно исправить поиск по имени в файле - C++
Проблема вот в чем допустим пользователь ввел Dnepr для поиска.В файле записано так: Dnepr.... Bosch.... Dnepr.... На экран выведет...

Организовать поиск записей по имени и по номеру телефона - C++
Кто может, помогите пожалуйста! Дана задача: Создать динамический массив, что хранит имя и телефон N студентов. Организуйте поиск по...

Найти файл по имени (поиск по всему диску C) - C++
Подскажите как можно найти файл по имени, чтоб поиск по всему диску с был

17
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.12.2013, 12:22 #2
WTSEnumerateProcesses
Одним вызовом получаете список запущенных процессов, их PID-ы и имена exe.
1
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
24.12.2013, 12:24  [ТС] #3
Спасибо. А можно пример программы.
0
Убежденный
Ушел с форума
Эксперт С++
15701 / 7211 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
24.12.2013, 12:35 #4
Код, который проверяет, запущен ли стандартный калькулятор (calc.exe):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <Windows.h>
#include <WtsApi32.h>
 
 
 
#pragma comment(lib, "wtsapi32.lib")
 
 
 
int main()
{
    WTS_PROCESS_INFOW * pProcessInfo;
    DWORD               NumProcesses;    
 
    if (NULL == WTSEnumerateProcessesW(WTS_CURRENT_SERVER_HANDLE,
        0, // Reserved.
        1, // Version,
        &pProcessInfo,
        &NumProcesses))
    {
        printf("WTSEnumerateProcessesW failed with last error %lu.\r\n", GetLastError());
        return EXIT_FAILURE;
    }
 
    bool fCalcFound = false;
 
    for (DWORD i = 0; i < NumProcesses; ++i)
    {
        if (0 == lstrcmpW(pProcessInfo[i].pProcessName, L"calc.exe"))
        {
            fCalcFound = true;
            break;
        }
    }
 
    WTSFreeMemory(pProcessInfo);   
 
    if (false == fCalcFound)
    {
        printf("No calculator running :(\r\n");
    }
 
    else
    {
        printf("Yes, calculator is running !\r\n");
    }
 
    return EXIT_SUCCESS;
}
2
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
24.12.2013, 14:51  [ТС] #5
Большое спасибо... Это то что нужно, но как сделать что-бы программа проверяла запущена ли какая программа кожною секунду и не сильно грузила процессор.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
24.12.2013, 15:05 #6
C++
1
2
3
4
5
while(1)
{
//проверить состояние процесса
Sleep(1000);
}
1
ALEXKIRNAS
10 / 10 / 2
Регистрация: 27.06.2013
Сообщений: 151
24.12.2013, 17:35  [ТС] #7
Огромное спасибо всем, я нашел ответ на свой вопрос
Если можно расскажите принцип роботы кода (напишите коментарии в листинге кода), а то я в программирование под виндовс 0
0
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1
26.03.2014, 16:37 #8
Убежденный, спасибо за пример, первый что нашел рабочий) Но возникли такие вопросы:
1) Как процесс определить только по части имени программы например: "ca" -> "calc.exe", "exp" -> "explorer.exe". Пробовал strstr, но ничего не вышло(
2) Как вывести список процессов допустим в консоль через cout?
Делаю так:
cout << (char *)pProcessInfo[i].pProcessName << endl;
Получаю только первые буквы из названий процессов, а если так:
cout << pProcessInfo[i].pProcessName << endl;
Получаю:
0030с338
0030с339
0030с348
0030с33A
0030с33B
и тому подобное...

Сам я ВБшник с си только пытаюсь разобраться, такчто прошу больно не пинать
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
26.03.2014, 16:41 #9
Цитата Сообщение от skMaster Посмотреть сообщение
1) Как процесс определить только по части имени программы например: "ca" -> "calc.exe", "exp" -> "explorer.exe". Пробовал strstr, но ничего не вышло(
Cравновать имя не полностью, а частично
0
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1
26.03.2014, 16:43 #10
Цитата Сообщение от aLarman Посмотреть сообщение
Cравновать имя не полностью, а частично
Цитата Сообщение от skMaster Посмотреть сообщение
Пробовал strstr, но ничего не вышло
Както так...

Добавлено через 39 секунд
Цитата Сообщение от skMaster Посмотреть сообщение
с си только пытаюсь разобраться
И так...
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
26.03.2014, 16:47 #11
Цитата Сообщение от skMaster Посмотреть сообщение
Получаю только первые буквы из названий процессов
первые буквЫ или буквУ, попробуйте так
C++
1
2
3
4
for(int i = 0; i < pProcessInfo[i].pProcessName.size(); i++)
{
wcout<<pProcessInfo[i].pProcessName[i];
}
Добавлено через 2 минуты
Цитата Сообщение от skMaster Посмотреть сообщение
Пробовал strstr, но ничего не вышло
C++
1
2
3
4
5
6
7
8
9
10
11
wstring Name = L"ca";
bool isEqual = true;
for(int i = 0 ; i < Name.size(); i++)
{
if(Name[i] != pProcessInfo[i].pProcessName[i])//не самое безопасное, потому что вдруг Вы зададите имя кторое длинне имени процесса
{ isEqual = false; break;}
}
if(isEqlual)
{
//
}
0
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1
26.03.2014, 17:26 #12
Спасибо большое. Попробую сначала сравнивать длину имени с моей строкой!
А по второму вопросу Вы тоже помогли, сделал так:
C++
1
wcout << pProcessInfo[i].pProcessName << endl;
Добавлено через 35 минут
По первому вопросу получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
wchar_t * pp = L"exp";
 
    for(DWORD i=0; i<NumProcesses; ++i)
    {
        wchar_t * process = pProcessInfo[i].pProcessName;
 
        if(wcsstr(process, pp) != 0)
        {
            wcout << L"Process found: " << process << endl;
        }
    }
А пробую искать несколько процессов, ничего невыходит. Делаю такой массив, перебором вравниваю, прога компилится, но падает с ошибкой(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
wchar_t * pp[] = {L"calc", L"calc.exe", L"exp"};
 
    for(DWORD i=0; i<NumProcesses; ++i)
    {
        wchar_t * process = pProcessInfo[i].pProcessName;
 
        for(int j=0; j<sizeof(pp); ++j)
        {
            if(wcsstr(process, pp[j]) != 0)
            {
                wcout << L"Process found: " << process << endl;
            }
        }
    }
Где ошибаюсь?
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
26.03.2014, 17:30 #13
sizeof(pp) = 4 вот где
0
skMaster
4 / 4 / 2
Регистрация: 26.02.2013
Сообщений: 39
Завершенные тесты: 1
26.03.2014, 17:43 #14
Тоесть я получил sizeof(int) = 4 байта? Но проблему это не решило, написал цифрой ограничение, всеравно ошибка (((

Добавлено через 8 минут
Поменял префиксный инкремент на постфиксный и всё заработало (++i) на (i++).
А размер массива определил так: (sizeof(pp)/sizeof(pp[0]))
Вот что вышло (процессы выводятся нормально):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wchar_t * pp[] = {L"note", L"wor", L"calc", L"agen", L"exp"};
 
    if(WTSEnumerateProcessesW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &NumProcesses) == NULL)
    {
        return false;
    }
 
    for(DWORD i=0; i<NumProcesses; i++)
    {
        wchar_t * process = pProcessInfo[i].pProcessName;
        
        for(int j=0; j<(sizeof(pp)/sizeof(pp[0])); j++)
        {
            if(wcsstr(process, pp[j]) != 0)
            {
                wcout << L"Process found: " << process << endl;
            }
        }
    }
Добавлено через 2 минуты
Новый вопрос: Как заставить wcsstr() игнорить регистр букв? (если L"exp" сменит на L"Exp" то ничего не найдется)
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
26.03.2014, 17:46 #15
Цитата Сообщение от skMaster Посмотреть сообщение
игнорить регистр букв? (если L"exp" сменит на L"Exp" то ничего не найдется)
написать свой аналог, а там все приводит к единому регистру
0
26.03.2014, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 17:46
Привет! Вот еще темы с ответами:

Файлы и структуры. Поиск студента по имени и сортировка - C++
Помогите с программой пожалуйста. #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; struct STUDENT ...

в case 7 - нужно сделать поиск по номеру группы, а в case 6 сортировку по имени - C++
Помогите пожалуйста: в case 7 - нужно сделать поиск по номеру группы, а в case 6 сортировку по имени #include &lt;iostream&gt; #include...

реализация поиска нужного имени в файле и вывод данных, относящихся к этому имени - C++
Доброго времени суток всем! Прошу помощи у более компитентных людей нежели я. Полное задание выглядит так: Разработать программу,...

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


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

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

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