Как определить количество процессов с наименьшим приоритетом и как для любого выбранного пользователем процесса вывести информацию?
Помогите мне, пожалуйста.
Вот код моей программы:
Код:
#pragma endregion
private: System::Void button_найти_Click(System::Object^ sender, System::EventArgs^ e)
{
// создание моментального снимка
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
MessageBox::Show("Ошибка! Снимок не был создан.");
return;
}
// получаем информацию о первом процессе
Entry.dwSize = sizeof(Entry);
Process32First(hSnapshot, &Entry); // сведения о первом процессе
if(!Process32First(hSnapshot, &Entry)) {
MessageBox::Show("Процесс не найден.");
CloseHandle(hSnapshot);
return;
}
do
{
listBoxпроцессы -> Items -> Add((Entry.th32ProcessID).ToString());
}
while(Process32Next(hSnapshot, &Entry));
labelkolvproc -> Visible = true;
int number = listBoxпроцессы -> Items -> Count; // подсчет количества элементов в списке
labelkolvproc -> Text = number.ToString();
flag = true; // установка флага: снимок сделан, в память занесены данные
}
private: System::Void button_очистить_Click(System::Object^ sender, System::EventArgs^ e) {
CloseHandle(hSnapshot); // очистка памяти
flag = false; // сброс флага
labelkolvproc -> Text = "0";
listBoxпроцессы -> Items -> Clear();
textBoxпроцессы -> Clear();
}
private: System::Void buttonзакрыть_Click(System::Object^ sender, System::EventArgs^ e) {
if(flag == true) {CloseHandle(hSnapshot);} // если флаг установлен, то освобождаем память
ExitProcess(0); // завершение процесса
Close();
}
private: System::Void listBoxпроцессы_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
TCHAR* ProcessName = NULL; // объявление переменной типа TCHAR*, символьный тип - аналог char
String^ temp = listBoxпроцессы -> SelectedItem -> ToString();
int ID = Int32::Parse(temp);
Process32First(hSnapshot, &Entry);
do
{
if(ID == Entry.th32ProcessID) // поиск совпадения по ID процесса
{
if(Entry.dwSize > offsetof(PROCESSENTRY32, szExeFile)) // проверка: заполнено ли имя процесса
{ // offsetof - смещение члена szExeFile относительно начала его родительской структуры
// разбирается полное имя процесса: если символ "\\" существует, то отбрасываем его
ProcessName = _tcsrchr(Entry.szExeFile, _T('\\'));
if(ProcessName == NULL)
ProcessName = Entry.szExeFile;
// преобразование типов TCHAR* в System::String (String^)
String^ Name = gcnew String(ProcessName);
textBoxпроцессы -> Text = "Имя процесса: " + Name + Environment::NewLine + ", "; // запись имени процесса в textBoxпроцессы
textBoxпроцессы -> Text += "PID: " + Entry.th32ProcessID + Environment::NewLine + ", ";
textBoxпроцессы -> Text += "PPID: " + Entry.th32ParentProcessID + Environment::NewLine + ". ";
}
}
}
while (Process32Next(hSnapshot, &Entry));
}
private: System::Void button_найти_MouseHover(System::Object^ sender, System::EventArgs^ e)
{
toolTip1 -> SetToolTip(button_найти, "Найти сведения");
}
private: System::Void button_очистить_MouseHover(System::Object^ sender, System::EventArgs^ e) {
toolTip1 -> SetToolTip(button_очистить, "Очистить");
}
private: System::Void buttonзакрыть_MouseHover(System::Object^ sender, System::EventArgs^ e) {
toolTip1 -> SetToolTip(buttonзакрыть, "Закрыть приложение");
}
private: System::Void найтиToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
this -> button_найти_Click(sender, e);
}
private: System::Void очиститьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
this -> button_очистить_Click(sender, e);
}
private: System::Void выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
this -> buttonзакрыть_Click(sender, e);
}
private: System::Void найтиПроцессToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
this -> button_НайтиПроцесс_Click(sender, e);
}
private: System::Void button_НайтиПроцесс_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button_НайтиПроцесс_MouseHover(System::Object^ sender, System::EventArgs^ e) {
toolTip1 -> SetToolTip(button_НайтиПроцесс, "Найти процесс");
}
Начало определения моего приложения:
Код:
#include <Windows.h> // WinAPI
#include <TlHelp32.h> // содержит описания функций для работы с процессами
#include <stddef.h> // определяет макрос offsetof
#include <tchar.h> // определяет макросы с префиксом _tcs для сопостовления кодировок
HANDLE hSnapshot;
PROCESSENTRY32 Entry;
bool flag; // флаг работы Snapshot
Срочно нужна помощь.
Скриншот моей программы:
Снимок.JPG