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

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

03.12.2015, 19:18. Показов 9112. Ответов 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
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
22.01.2016, 13:43  [ТС]
nick42, Dinkin, забыл еще спросить господа. В Borland C++ Builder 6, есть-ли поддержка оператора foreach, и если да, то как его использовать?!
Мне необходимо из IUserCollectionPtr внести все значения в combobox.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
22.01.2016, 13:44
Цитата Сообщение от Vladislav717 Посмотреть сообщение
есть-ли поддержка оператора foreach
Не, нету..появиться только в последней версии.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
22.01.2016, 16:26
Vladislav717, У меня нет среды под рукой что бы править Ваш вариант, но исходя из того что выше написано было, можно сделать две кнопки теперь такими:

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
void __fastcall TForm2::Button2Click(TObject *Sender)
{
   //Кнопка построить процессы  (вариант nick42)
   List->Clear();
   ListBox1->Items->Clear();
   UINT iStops[2] = { 90, 160 };  AnsiString 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((AnsiString)pe.szExeFile+    "("+G+")");
      List->Add((HWND)pe.th32ProcessID);
      }
    } while  (Process32Next(snap, &pe));
    CloseHandle(snap);
}
//---------------------------------------------------------------------------

и кнопка завершения процесса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm2::Button3Click(TObject *Sender)
{
//Кнопка завершения процесса
 
DWORD  PID;
GetWindowThreadProcessId((HWND)List->Items[ListBox1->ItemIndex], &PID);
 
DWORD ExitCode;
HANDLE hp;
bool ret = true;
 
if(PID)
  {
    hp = OpenProcess(PROCESS_ALL_ACCESS, true, PID);
    if (hp)
        {
        GetExitCodeProcess(hp, &ExitCode);
        ret = TerminateProcess(hp, ExitCode);
        CloseHandle(hp);
        }
    }
}
//---------------------------------------------------------------------------
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
22.01.2016, 16:38
Вот так все процессы видны:
Вложения
Тип файла: 7z Project_0909.7z (294.6 Кб, 17 просмотров)
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
22.01.2016, 20:01  [ТС]
volvo,
Цитата Сообщение от volvo Посмотреть сообщение
Вот так все процессы видны:
но так они не завершаются!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
22.01.2016, 21:16
Это твои проблемы, я специально сделал вывод ошибок, тебе должно показать, почему именно не завершается процесс.

Добавлено через 20 минут
Вот это:
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    try
    {
        DWORD PID = (DWORD)List->Items[ListBox1->ItemIndex];
 
        DWORD ExitCode;
        HANDLE hp;
        bool ret = true;
 
        if (PID)
        {
            hp = OpenProcess(PROCESS_TERMINATE, FALSE, PID);
            if (hp)
            {
                GetExitCodeProcess(hp, &ExitCode);
                ret = TerminateProcess(hp, ExitCode);
                if (ret)
                {
                    Application->MessageBox("Процесс успешно завершен", "Успех", MB_OK | MB_ICONINFORMATION);
                }
                else
                {
                    ShowMessage(SysErrorMessage(GetLastError()));
                }
                CloseHandle(hp);
            }
        }
 
    }
    catch (int a)
    {
        MessageDlg("Exception - 1", mtError, TMsgDlgButtons() << mbOK, 0);
    }
    Button1->Click();
}
(при запуске из-под администратора) прекрасно завершает процесс, не знаю, что у тебя не работает... Может, тебе рано еще подобные программы писать просто?
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
23.01.2016, 13:39  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Это твои проблемы, я специально сделал вывод ошибок, тебе должно показать, почему именно не завершается процесс.
Я видел catch однако он на каждом процессе, просто выдает "Отказано в доступе". Больше ничего!

Добавлено через 7 минут
Теперь с новым кодом, все работает! Но почему-то не ко всем процессам, узнает путь на диске.

Добавлено через 5 минут
Поиск пути к исполняемому файлу процесса, у меня реализован таким образом. Работает как я уже говорил выше не для всех процессов в списке. Примерно 20-25% только. Что тут необходимо исправить чтобы максимально повысить процент обнаружения пути к каждому процессу?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Вывод пути к файлу процесса
Label4->Caption = "";
DWORD PID = (DWORD)List->Items[ListBox1->ItemIndex];
// 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) )
    {
 
       Label4->Caption = lpme.szExePath;
       break;
 
    }
 
    CloseHandle(ss);
  }
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
23.01.2016, 13:48
не у всех процессов есть путь
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
23.01.2016, 14:29  [ТС]
Цитата Сообщение от Dinkin Посмотреть сообщение
не у всех процессов есть путь
я это понимаю но вот в чем фокус.
Все мы знаем что такое к примеру explorer.exe - и все мы знаем какой у него путь.
Но программа почему-то не знает... Как и многих других exe процессов... Как быть-то?!
Миниатюры
Вывод списка и завершение процессов  
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
23.01.2016, 14:32  [ТС]
Наверное надо по PID искать путь к процессу.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
23.01.2016, 14:53
Vladislav717, нормально все определяется (на кодировку внимания не обращать, у меня нерусифицированная ОС):



У тебя и так путь ищется по PID, если что...
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
23.01.2016, 14:59
volvo, он мне прислал проект, так же все отлично определяется. Делаю ставку что запущено не от Администратора.
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
23.01.2016, 16:26  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
нормально все определяется
Почему же у меня не ищет?! Как исправить этот парадокс?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.01.2016, 19:26
Цитата Сообщение от Vladislav717 Посмотреть сообщение
Почему же у меня не ищет?! Как исправить этот парадокс?
Наверное, потому что....
Цитата Сообщение от Dinkin Посмотреть сообщение
Делаю ставку что запущено не от Администратора
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
24.01.2016, 22:15  [ТС]
Почтальон, проверено. Дело явно не в этом... Я не настолько глуп
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
12.02.2016, 02:59  [ТС]
Почтальон, Dinkin, Проверил даже на виртуалке с правами администратора и без прав, на отрез не хочет видеть путь к файлу процесса. Я не знаю почему у вас все работает так идеально, но у меня не на 10-ка ни на 7-ке ни деже на ХРюше не видит. Только некоторые процессы.
Миниатюры
Вывод списка и завершение процессов  
0
 Аватар для Vladislav717
7 / 7 / 3
Регистрация: 03.12.2015
Сообщений: 113
12.02.2016, 03:04  [ТС]
Вот прикрепляю проект. Что тут не так?!
Вложения
Тип файла: rar Project_0909.rar (2.72 Мб, 21 просмотров)
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,182
Записей в блоге: 3
12.02.2016, 10:40
В твоем случая скорее всего защита блокирует информацию к пути запуска важных процессов (иногда это делают антивирусы).
Может тут поможет поднятия привилегий для программы. Или другие уловки.
Вот ниже пример как срабатывает у меня на работе (на семерке не показывает, на XP норм), дома 10-ка, тоже норм.

PS у тебя в проекте затисался мусор в форме обработчика событий для Button3 , в дизайнере ее нет, а в коде есть.
Миниатюры
Вывод списка и завершение процессов  
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
12.02.2016, 11:47
Нет, тут не привилегии, это где-то глубже. У меня до черта прав на моей машине и ни одного антивирусника нет (надеюсь, и вируса тоже). И программа большую половину не идентифицирует в смысле пути к файлу. Если класс приоритета нулевой, то и INVALID_HANDLE_VALUE обеспечено, а значит поиск по MODULEENTRY32 не выполняется.

Добавлено через 25 секунд
Причем и на XP, и на семерке аналогично.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
12.02.2016, 11:52
Vladislav717, тут разные "помехи" могут быть.

Во-первых, безопасность Windows не даст просто так открыть процессы,
запущенные под другой учеткой. Чтобы это обойти, нужно перед работой с
процессами и/или потоками включить привилегию отладки (SE_DEBUG_NAME).
Это можно сделать только имея права администратора.

Во-вторых, путь к исполняемому файлу процесса хранится в его адресном пространстве, в
блоке структур, которые начинаются с PEB. И если твой процесс 32-битный, а целевой
процесс 64-битный, то читать его память напрямую не получится, система не даст.
Это типичный случай для explorer.exe (на 64-битных Виндах он 64-битный тоже).

В-третьих, начиная еще с Vista существуют защищенные процессы, которые не всегда
получится открыть с нужными правами, даже имея права администратора или системы и
включенную привилегию отладки. То же самое могут делать антивирусы, например.

По своему опыту скажу, что из процесса правильной разрядности (32 на 32-битной Windows и
64 на 64-битной Windows) с включенной привилегией отладки большую часть данных о
практически любом процессе можно вытащить стандартными функциями типа
GetModuleFileNameEx, GetTokenInformation и т.п., explorer.exe в том числе.

И по поводу CreateToolhelp32Snapshot, которая у тебя используется,
MSDN пишет:
If the specified process is a 64-bit process and the caller is a 32-bit process, this function fails and the last error code is ERROR_PARTIAL_COPY (299).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.02.2016, 11:52

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru