@Lnkova

Почему не сканирует диспетчер задач?

Пишу диспетчер задач, используя winapi. Его задача показывать запущенные процессы и их количество, останавливать и возобновлять процесс и изменять приоритет. Но он не выполняет 1 задачу. Что делать, подскажите?
#include "pch.h"

#include <windows.h>

#include <tlhelp32.h>

#include <iostream>

#include <Psapi.h>

#include <string>

using namespace std;

DWORD Priority(int x) {

	switch (x) {

	case 0:

		return IDLE_PRIORITY_CLASS;

		break;

	case 1:

		return BELOW_NORMAL_PRIORITY_CLASS;

		break;

	case 2:

		return NORMAL_PRIORITY_CLASS;

		break;

	case 3:

		return ABOVE_NORMAL_PRIORITY_CLASS;

		break;

	case 4:

		return HIGH_PRIORITY_CLASS;

		break;

	case 5:

		return REALTIME_PRIORITY_CLASS;

		break;

	}

}

int main()

{

	string decision;

	PROCESS_MEMORY_COUNTERS memCounter;

	HANDLE hSnap, process[200];

	int size, prior_dec, proc_num;

	int i = 0;

	hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	PROCESSENTRY32 proc;

	while (true) {

		cout << "What to do? (scan/change/stop)" << endl;

		cin >> decision;

		if (decision == "scan") {

			if (Process32First(hSnap, &proc)) {

				do {

					process[i] = OpenProcess(PROCESS_ALL_ACCESS, false, proc.th32ProcessID);

					GetProcessMemoryInfo(process[i], &memCounter, sizeof(memCounter));

					cout << "#" << i << " " << proc.szExeFile << " " << memCounter.WorkingSetSize / 8 << " KB" << endl;

					i++;

				} while (Process32Next(hSnap, &proc));

			}

		}

		if (decision == "change") {

			cout << "Process number?" << endl;

			cin >> proc_num;
			cout << "Priority?(0-5)" << endl;

			cin >> prior_dec;

			SetPriorityClass(process[proc_num], Priority(prior_dec));

		}

	}

	system("pause");
	return 0;

}
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
process[i] = OpenProcess(PROCESS_ALL_ACCESS, false, proc.th32ProcessID);

Обычный пользователь сможет открыть только свои процессы с доступом PROCESS_ALL_ACCESS. Для всех остальных процессов этот вызов завершится с ошибкой.
Чтобы вызвать GetProcessMemoryInfo PROCESS_ALL_ACCESS не нужен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы