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

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

03.12.2015, 19:18. Показов 8956. Ответов 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,149
Записей в блоге: 3
22.01.2016, 13:44
Цитата Сообщение от Vladislav717 Посмотреть сообщение
есть-ли поддержка оператора foreach
Не, нету..появиться только в последней версии.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 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
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
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
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
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,149
Записей в блоге: 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
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
23.01.2016, 14:53
Vladislav717, нормально все определяется (на кодировку внимания не обращать, у меня нерусифицированная ОС):



У тебя и так путь ищется по PID, если что...
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 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,149
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru