Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
2 / 2 / 2
Регистрация: 12.12.2011
Сообщений: 95
1

Как завершить процесс зная его имя?

01.10.2016, 20:28. Показов 2614. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу убить процесс зная его имя, но, он не убивается. ((
Как это можно сделать?
Пишу на Embarcadero XE8

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
DWORD GetProcessByExeName(char *ExeName)
{
    DWORD Pid;
 
    PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof(PROCESSENTRY32);
 
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    if( hProcessSnap == INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL, "Error = " + GetLastError() , "Error (GetProcessByExeName)", MB_OK|MB_ICONERROR);
        return false;
    }
 
    if ( Process32First(hProcessSnap, &pe32) )
        {
            do
                {
                    if ( strcmpi(pe32.szExeFile, ExeName) == 0)
                        {
                                CloseHandle(hProcessSnap);
                                return pe32.th32ProcessID;
                        }
                } while ( Process32Next(hProcessSnap, &pe32) );
        }
 
    CloseHandle(hProcessSnap);
    return 0;
}
 
 
void  TMainForm::TaskKill()
{
 
 
        DWORD PID = GetProcessByExeName("calc.exe");
        if ( !PID )
        {
            ShowMessage("Процесс не найден");
        }
        else
        {
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID );
            if ( TerminateProcess(hProcess, 0) )
            {
                ShowMessage("Процесс убит");
            }
            else
            {
                ShowMessage("Не могу убить процесс");
            }
        }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2016, 20:28
Ответы с готовыми решениями:

Убить процесс, зная имя.exe
Всем привет!! Подскажите как убить процесс, зная его имя, есть вот такой примерчик: short...

Как узнать имя окна (обьекта), зная его хэндл?
Допустим, хэндл окна я узнаю так: HANDLE h=WindowFromPoint(Mouse->CursorPos); Класс так:...

Как можно завершить процесс зная его имя ?
как можно завершить процесс зная его имя ?

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

6
BOGG ART
01.10.2016, 20:43
  #2

Не по теме:

Ну и какой код ошибки?
Builder это мутант из Delphi и Си. VCL там идентично. Может он всё же может: ShowMessage("GetProcessByExeName:\r\n\r\n\r\n"+SysErrorMessage(GetLastError()));

0
2 / 2 / 2
Регистрация: 12.12.2011
Сообщений: 95
01.10.2016, 21:38  [ТС] 3
Выводится сообщение "Не могу убить процесс", а код приведенный ниже сообщений об ошибках не выводит.

C++
1
2
3
4
5
  if( hProcessSnap == INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL, "Error = " + GetLastError() , "Error (GetProcessByExeName)", MB_OK|MB_ICONERROR);
        return false;
    }
Дополнение
ShowMessage("Не могу убить процесс");
ShowMessage("GetProcessByExeName:\r\n\r\n\r\n"+SysErrorMessage(GetLastError()));

Выдало сообщение "Неверный дескриптор"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.10.2016, 21:42 4
C++
1
2
3
4
5
6
7
8
            if ( TerminateProcess(hProcess, 0) )
            {
                ShowMessage("Процесс убит");
            }
            else
            {
                ShowMessage(SysErrorMessage(GetLastError()));
            }
Что выдает?
0
2 / 2 / 2
Регистрация: 12.12.2011
Сообщений: 95
01.10.2016, 22:00  [ТС] 5
C++
1
2
3
4
5
6
7
8
    if ( TerminateProcess(hProcess, 0) )
            {
                ShowMessage("Процесс убит");
            }
            else
            {
                ShowMessage("Не могу убить процесс: " + SysErrorMessage(GetLastError()) )  ;
            }
Выдает: Не могу убить процесс: Неверный дескриптор
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.10.2016, 22:07 6
Попробуй 43 строку заменить на
C++
1
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, TRUE, PID);
2
2 / 2 / 2
Регистрация: 12.12.2011
Сообщений: 95
01.10.2016, 22:14  [ТС] 7
Спасибо, так работает!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   DWORD PID = GetProcessByExeName("calc.exe");
        if ( !PID )
        {
            ShowMessage("Процесс не найден");
        }
        else
        {
        HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, TRUE, PID);
            if ( TerminateProcess(hProcess, 0) )
            {
                ShowMessage("Процесс убит");
            }
            else
            {
                ShowMessage("Не могу убить процесс");
            }
        }
0
01.10.2016, 22:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2016, 22:14
Помогаю со студенческими работами здесь

Как завершить процесс, зная имя экзешника?
у меня есть textBox2, в него идет ссылка на файла. Пример C:\Users\admin\Desktop\zz.exe Мне нужно...

Как найти процесс, зная полное имя файла
Мне дано полное имя файла, и по этому файлу я должен найти соответственный процесс(если он запущен).

Как узнать полное имя файла зная его краткое имя?
например при запуске программы достаточно написать "Excel" или "Calc" при этом система уже в курсе...

Как определить самый новый процесс и завершить его?
привет. не подскажете как завершить самый новый процесс, необходимо сделать ч/з kill -9 может с...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru