Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113

Вывод списка и завершение процессов

03.12.2015, 19:18. Показов 9150. Ответов 60

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые господа. В универе дали курсовую работу, на тему управления процессами (получение списка, создание, завершение и тд).

У меня собственно первый вопрос. (Раньше я не работал в Borland C++).
Как получить список процессов в ListBox?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2015, 19:18
Ответы с готовыми решениями:

Вывод списка активных процессов в builder 2010
Всем привет. Такая проблема: код для вывода списка процессов отлично работает в 6-м билдере. Вот он: PACKAGE void __fastcall...

Завершение всех запущенных процессов из находящегося в текстовом файле списка запрещенных к запуску процессов
пожалуйста помогите написать батник. Задать в текстовом файле список процессов, запрещенных к запуску. Создать командный файл,...

Вывод списка процессов и их Id
Помогите плиз хочу вывести полный список процессов, а выводит только 1 процесс. В listBox вообще не выводит ничего. private void...

60
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
20.01.2016, 22:40
Студворк — интернет-сервис помощи студентам
я бы хотел что бы вы Понял в чем ошибка, ведь от этого больше пользы будет =)

Вы не удалили строчку
C++
1
2
3
4
5
6
7
8
....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TList *List = new TList;// <-ее надо было объявить глобально, а у вас она и глобально и локально (тоесть просто убрать эту строчку и все)
HWND h = Handle;
char buf[128];
List->Clear();
...
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
20.01.2016, 22:55  [ТС]
Dinkin, все работает. Но теперь проблема в том что выводит по заголовку окон, а нужно file.exe. И в придачу как-то через try catch сделать вывод сообщения успешно удалился процесс или ошибка, он защищен и тд. Ну и из списка соответственно пункт тоже удалять, либо вызвать получение заново.

Ну а так же осталось 2 последних пункта.

1. Вывод полного пути к файлу процесса.
2. Узнать текущий приоритет процесса.

Добавлено через 9 минут
Dinkin, все вышеперечисленное я сделал, кроме того что должно выводить по имени файла (file.exe). Осталось сделать только это:
Цитата Сообщение от Vladislav717 Посмотреть сообщение
1. Вывод полного пути к файлу процесса.
2. Узнать текущий приоритет процесса.
Ну и конечно-же чтобы выводило file.exe, а не заголовок окна в списке.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
20.01.2016, 22:57
1) Что бы убрать из списка,просто перегрузите список, типа так
Button1->Click();
2) Ранее в теме я Вам прислал код вывода пути в Memo по нажатию кнопки.
3) На форуме оч много примеров получения приоритета =)
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
20.01.2016, 23:07  [ТС]
Dinkin,
Цитата Сообщение от Dinkin Посмотреть сообщение
1) Что бы убрать из списка,просто перегрузите список, типа так
Button1->Click();
2) Ранее в теме я Вам прислал код вывода пути в Memo по нажатию кнопки.
3) На форуме оч много примеров получения приоритета =)
1. Готово
2. Путь выводит, однако не для всех процессов.
3. Не могу найти и не знаю как правильно использовать сторонние библиотеки.

Ну и осталось сделать чтобы выводило имя файла процесса, а не заголовок окна.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
20.01.2016, 23:17
Тут такое дело,у процесса может в обще не быть окна, ....или если процессор был создан другим процессом, на прямую уже путь не проследите.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
for ( bool ok(Module32First(ss, &lpme)); ok; ok = Module32Next(ss, &lpme) )
    {
       Memo1->Lines->Add(lpme.szModule);// Эта строка добавить имя исполняемого файла, если он у процесса есть
       Memo1->Lines->Add(lpme.szExePath);
       break;
 
    }
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
20.01.2016, 23:22  [ТС]
Dinkin, куда это вставлять и для чего оно вообще?!
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
20.01.2016, 23:26
На кнопку получения пути. Первым будет добавлен имя исполняющего, вторая строка путь

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Memo3->Clear();
 
DWORD  PID;
GetWindowThreadProcessId((HWND)List->Items[ListBox1->ItemIndex], &PID);
 HANDLE    ss(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID));
  if ( ss != INVALID_HANDLE_VALUE )
  {
  MODULEENTRY32 lpme = { sizeof(MODULEENTRY32) };
 
  for ( bool ok(Module32First(ss, &lpme)); ok; ok = Module32Next(ss, &lpme) )
    {
       Memo3->Lines->Add(lpme.szModule);// Эта строка добавить имя исполняемого файла, если он у процесса есть
       Memo3->Lines->Add(lpme.szExePath);
       break;
    }
    CloseHandle(ss);
  }
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
20.01.2016, 23:31  [ТС]
Dinkin, так вы не поняли. Мне надо чтобы в самом списке (т.е ListBox) были не заголовки окон как сейчас, а имена исполняемых файлов.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
20.01.2016, 23:47
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

ок
1) Добавьте к проекту следующую функцию


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AnsiString ReturnName(int hw)
{
 DWORD  PID;
 GetWindowThreadProcessId((HWND)hw, &PID);
 HANDLE    ss(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID));
  if ( ss != INVALID_HANDLE_VALUE )
  {
  MODULEENTRY32 lpme = { sizeof(MODULEENTRY32) };
 
    for ( bool ok(Module32First(ss, &lpme)); ok; ok = Module32Next(ss, &lpme) )
    {
       return lpme.szModule;
    }
    CloseHandle(ss);
  }
}
//---------------------------------------------------------------------------
Что бы она заработала, в h.вкладки пропишите ее здесь
C++
1
2
3
4
5
6
7
8
9
10
....
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
AnsiString ReturnName(int hw);//<----------------Вот тут вставить
//---------------------------------------------------------------------------
#endif

2) Далее, изменить код кнопки для построения процессов на следующий

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
oid __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND h = Handle;
AnsiString st;
wchar_t buf[128];//wchar_t
List1->Clear();
ListBox1->Items->Clear();
 do {
    h = GetNextWindow(h, GW_HWNDNEXT);
    GetWindowText(h, buf, 128);
 
    if (buf[0])
       {
        st=ReturnName((int)h);
        if(!st.IsEmpty() && ListBox1->Items->IndexOf(st)<0)
        {
            List1->Add(h);
            ListBox1->Items->Add(st);
        }
       }
 
    } while (h != NULL);
 ListBox1->ItemIndex = 0;
 ListBox1->Update();
}
//---------------------------------------------------------------------------
Он вам выведи только те процессы,котрые подходят под ваши критерии
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
21.01.2016, 02:06  [ТС]
Dinkin, вроде работает. Осталось только узнать приоритет. Только узнать, изменять его не требуется...

Добавлено через 28 минут
Так же, я не понял что вы тут имели ввиду и как это осуществить...
Цитата Сообщение от Dinkin Посмотреть сообщение
Что бы она заработала, в h.вкладки пропишите ее здесь
Добавлено через 1 час 34 минуты
Dinkin, все! Реализации вывода приоритета не требуется, почитал какую-то книгу на просторах гугла и реализовал вот таким вот методом. Не знаю правильный-ли он, но он работает! Главное сам сделал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Вывод приоритета процесса
HANDLE ProcessHandle, ThreadHandle;
DWORD ProcessID = GetCurrentProcessId();
 
ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,false,PID);
Label2->Caption = GetPriorityClass(ProcessHandle);
ThreadHandle = GetCurrentThread();
SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL);
//Label2->Caption = GetThreadPriority(ThreadHandle);
switch(GetPriorityClass(ProcessHandle)){
 case 256: Label2->Caption = "Реального времени"; break;
 case 128: Label2->Caption = "Высокий"; break;
 case 32768: Label2->Caption = "Выше среднего"; break;
 case 32: Label2->Caption = "Обычный"; break;
 case 16384: Label2->Caption = "Ниже среднего"; break;
 case 64: Label2->Caption = "Низкий"; break;
 default: Label2->Caption = "Неизвестный";
}
Добавлено через 4 минуты
Dinkin, самое последнее что необходимо сделать это вывод полного списка процессов, а не так как вы мне предложили
Цитата Сообщение от Dinkin Посмотреть сообщение
Он вам выведи только те процессы,котрые подходят под ваши критерии
Мне нужны даже те, которые не подходят под критерии. Полный список всех exe процессов.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
21.01.2016, 07:27
Цитата Сообщение от Vladislav717 Посмотреть сообщение
Полный список всех exe процессов.
в первом варианте весь список вам давал, в последнем варианте выводит список только exe))

PS, У Вас то сначала все работает,а после вы не понимаете что имелось введу
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
21.01.2016, 21:30  [ТС]
Dinkin, понимаете в чем проблема...
Цитата Сообщение от Dinkin Посмотреть сообщение
в последнем варианте выводит список только exe))
какраз таки далеко не всех. Из 98 процессов в системе, из которых примерно 40 exe-шных, видит только 7-8.
А должно видеть все, как в диспетчере задач.
Миниатюры
Вывод списка и завершение процессов  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33451 / 21551 / 8248
Регистрация: 22.10.2011
Сообщений: 37,004
Записей в блоге: 12
22.01.2016, 00:20
Лучший ответ Сообщение было отмечено BRcr как решение

Решение

Кто ж процессы ищет перечислением окон верхнего уровня?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap == INVALID_HANDLE_VALUE) return;
    PROCESSENTRY32 pe = {0};
    pe.dwSize = sizeof(pe);
 
    if (!Process32First(snap, &pe))
    {
        CloseHandle(snap);
        return;
    }
 
    do
    {
        if (pe.th32ProcessID != 0)
            // if (ListBox1->Items->IndexOf(pe.szExeFile) == -1)
                ListBox1->Items->Add(pe.szExeFile);
    }
    while (Process32Next(snap, &pe));
    CloseHandle(snap);
- будут тебе все процессы
1
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
22.01.2016, 02:42  [ТС]
volvo,
Цитата Сообщение от volvo Посмотреть сообщение
- будут тебе все процессы
Данный пример не работает с тем кодом, который у меня есть!
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.01.2016, 09:10
Цитата Сообщение от Vladislav717 Посмотреть сообщение
Данный пример не работает
А #include <tlhelp32.h> добавили перед компиляцией? Если у меня на BCB5 работает, то и в остальных должно пахать... .
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
22.01.2016, 09:12
Цитата Сообщение от Dinkin Посмотреть сообщение
2) В h файле добавляешь #include <tlhelp32.h>
Да первым делом ему пришлось бы подключать, иначе бы он и раньше не смог собрать).
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.01.2016, 11:44
Возможно.
Вот не придумаю, как в такой записи__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button2Click(TObject *Sender)
{ 
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap == INVALID_HANDLE_VALUE) return;
    PROCESSENTRY32 pe = {0};
    pe.dwSize = sizeof(pe);
    if (!Process32First(snap, &pe)) { CloseHandle(snap); return; }
    do { if (pe.th32ProcessID != 0)
        ListBox1->Items->Add(String().sprintf("%s%8c приоритет  %d",
              pe.szExeFile,' ', pe.pcPriClassBase));
    }  while  (Process32Next(snap, &pe));
    CloseHandle(snap);
}
табуляцию вставить и pe.pcPriClassBase расшифровать из цифровой формы. Идеи будут?

Добавлено через 1 час 18 минут
Ну, с табуляцией, похоже, разобрался... - нужно в свойствах листбокса TabWidth ,например, в 4, и добавить пару строк:
C++
1
2
    UINT iStops[2] = { 80, 120 };      
    SendMessage( ListBox1->Handle,LB_SETTABSTOPS,2,(long)iStops );
А вот с приоритетами пока никак; их там несколько: 4, 6, 8, 9, 11, 13...

Добавлено через 9 минут
Для приоритета потоков гугль дал такие значения:
4 Ожидающий
8 Нормальный
13 Высокий
24 Реальное время
но это, наверное, не совсем то

Добавлено через 9 минут
П.С. в диспетчере наблюдаются всего три уровня: низкий (4), средний (до 13) и высокий (13). Можно этим и ограничиться.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
22.01.2016, 11:46
Наверное для автора топика нужно собрать целый проект и выложить, так как видимо у него со сборкой периодически возникают трудности
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
22.01.2016, 12:15
Цитата Сообщение от Vladislav717 Посмотреть сообщение
Как получить список процессов в ListBox?
с учетом описанных извращений...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button2Click(TObject *Sender)
{       //   #include <tlhelp32.h>
    UINT iStops[2] = { 90, 160 };  String G ;
    SendMessage( ListBox1->Handle,LB_SETTABSTOPS,2,(long)iStops );
    HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snap == INVALID_HANDLE_VALUE) return;
    PROCESSENTRY32 pe = {0};
    pe.dwSize = sizeof(pe);
    if (!Process32First(snap, &pe)) { CloseHandle(snap); return; }
    do { if (pe.th32ProcessID != 0)  {
      if(pe.pcPriClassBase <5L) G = "низкий";
      if(pe.pcPriClassBase >4L) G = "ниже среднего";
      if(pe.pcPriClassBase >6L) G = "средний";
      if(pe.pcPriClassBase >8L) G = "выше среднего";
      if(pe.pcPriClassBase>12L) G = "высокий";
      if(pe.pcPriClassBase>23L) G = "реального времени";
      ListBox1->Items->Add(String().sprintf("%s\t %s",pe.szExeFile,G)); }
    }  while  (Process32Next(snap, &pe));
    CloseHandle(snap);
}
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
22.01.2016, 13:39  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
Наверное для автора топика нужно собрать целый проект и выложить, так как видимо у него со сборкой периодически возникают трудности
Был бы очень благодарен, на данный момент выложу полный рабочий проект. Допилить бы только чтобы все exe процессы было видно...
Вложения
Тип файла: rar Project.rar (3.66 Мб, 14 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2016, 13:39

Вывод списка процессов
Нужно написать программу на С\С++ для Linux, которая выводит список процессов, список потоков, информацию о процессе, занятые...

Вывод списка исполняемых процессов
Ребят помогите нужно каким либо способом вывести список исполняемых процессов возможно есть у кого то скрипт поделитесь пожалуйста

Вывод списка запущенных процессов в ComboBoxEx
Здравствуйте, подскажите как вывести список запущенных процессов x86 и x64 в компонент &quot;ComboBoxEx1&quot; с иконками. Чтоб...

Вывод списка процессов компьютера, занимающих от 1 МБ до 10 МБ памяти
Создать задание которое выведет список процессов компьютера занимающих от 1МБ до 10 МБ памяти. Помогите пожалуйста!

Завершение процессов
Ребята ! нужна ваша помощь !!! Как закрыть все процессы кроме определенных ??? Желательно на примере . Спасибо.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru