Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/203: Рейтинг темы: голосов - 203, средняя оценка - 4.51
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16

Завершить процесс

03.02.2011, 18:14. Показов 39965. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как завершить процессор(которые обычно отображаются в диспетчере задач) например надо завершить процессор game.exe.
П.С. Есть какой-нибудь русскоязычный FAQ по билдеру?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2011, 18:14
Ответы с готовыми решениями:

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

Как завершить процесс, запущенный от себя, по имени процесса?
как завершить процесс запущенный от себя по имени процесса? что то искал везде но не нашёл Добавлено через 48 минут у меня у...

Открыть процесс процесс на полный доступ, и запретить для других
Всем доброго времени суток. Друзья, HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID); Так я открываю процесс на полный...

23
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 19:53
Можно из программы создать временный Bat. Текстовый файл со следуйщим содержаним.
Code
1
taskkill /IM game.exe
и запустить его из программы на выполнение обычной командой ShellExecute. А потом удалить файл командой DeleteFile. Вроде способ хороший.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.02.2011, 19:57
http://msdn.microsoft.com/en-u... s.85).aspx

PS. за частую нужно иметь привилегии отладчика..
3
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
03.02.2011, 20:32
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
#include <tlhelp32.h>
...
DWORD GetProcessByExeName(char *ExeName);
...
// ------------------------------------- Использование --------------------------------------
        DWORD PID = GetProcessByExeName("notepad.exe");
        if ( !PID ) ShowMessage("Процесс не найден");
        else
        {
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID );
        if ( TerminateProcess(hProcess, 0) ) ShowMessage("Процесс убит");
                else ShowMessage("Не могу убить процесс");
        }
// ----------------------------------------------------------------------------------
 
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;
}
3
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 21:25
C++
1
2
3
4
5
6
7
8
TMemo* mem = new TMemo(this); // Создаем Memo. В этом случае лучще использовать Memo. Да и просто плохо разбираюсь с VCL
mem->Text = "taskkill /IM game.exe"; //Записываем с mem команду для командной строки. game.exe это процес
mem->Lines->SaveToFile("task.bat");  // Создаем так называемый батник. Он служит для перидачи команд в командную строку Windows
ShellExecute(Handle, "open", "task.bat", NULL, NULL, SW_RESTORE); //после чего запускаем созданный нами батник, что приводим к завершению процеса game.exe
Sleep(1000); //задержка обязательна, так как надо дать завершить процес прежде чем удалять батник.
DeleteFile("task.bat"); //Теперь прощаемся с батником. Удаляем его. :( Но это не обязательно. Только если вы не хотите что-бы узер решивший запустить батник не заверщил процес
 
//на этом все. Удачи Вам!
1
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.02.2011, 21:39
Лучший ответ Сообщение было отмечено как решение

Решение

Vlad_IT, Это глупо.. и в с есть интересная ф-ция system..
Можно просто написать
C++
1
system("taskkill /IM game.exe")
и не мучатся с батником =)
9
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 21:42
ISergey, Ну да. Но все же это не глупо. Основа та дана. А про функцию system я не чего не знал.
PS Только почему Вы парню сразу не дали коротки код?
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.02.2011, 21:49
Цитата Сообщение от Vlad_IT Посмотреть сообщение
PS Только почему Вы парню сразу не дали коротки код?
Он мне тоже мне не нравится =) Луче не поленится и делать как kzru_hunter показал, но там желательно еще получить права отладчика..
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 21:53
Цитата Сообщение от ISergey Посмотреть сообщение
Он мне тоже мне не нравится =)
Аргументируйте пожалуйста Просто я не видел в нем не чего плохого. На ту команду может и анти вирус обозлится, а на мою нет. И все же моя для отладки удобна, в той может быть много не заметных ошибок которые потом проявятся уже не у прогера а у узера. Это приведет к значительным убыткам если Автор решит продать программу.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
03.02.2011, 22:04
Цитата Сообщение от Vlad_IT Посмотреть сообщение
На ту команду может и анти вирус обозлится, а на мою нет
На system ? Особой разницы нет с вашим кодом нет.. действия то одинаковы...
Цитата Сообщение от Vlad_IT Посмотреть сообщение
И все же моя для отладки удобна
Сомневаюсь что удобно для отладки.. Вы не знаете запущен ли процесс? или был он убит потом..

Код kzru_hunter это все проверяет.. Ну в конечном итоге программа taskkill будет использовать код похожий на тот что у kzru_hunter....
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 22:22
Ладно все понятно. Извините . Ваш код конечно намного гибок чем мой. В Вашем можно использовать исключение ошибок. Я просто предложил свой. Удачи Вам
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.02.2011, 22:22
Кроме всего прочего, есть еще и такое понятие, как хороший стиль программирования, и файл .BAT туда не влезает.
0
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
03.02.2011, 23:05
Цитата Сообщение от LK Посмотреть сообщение
Кроме всего прочего, есть еще и такое понятие, как хороший стиль программирования, и файл .BAT туда не влезает.
Я же все понял
1
13 / 5 / 0
Регистрация: 07.05.2013
Сообщений: 26
10.05.2014, 10:26
Есть способ лучше, чем батник или тасккилл.
Ставим в хедеры это:
C++
1
#include <tlhelp32.h>
Потом ставим этот код:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
bool IsProcessRun(char *procname)
{
bool RUN;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnapshot, &pe);
 
if (strcmp(pe.szExeFile, procname) == 0)
{
RUN = true;
return RUN;
}
else
RUN = false;
while (Process32Next(hSnapshot, &pe))
{
if (strcmp(pe.szExeFile, procname) == 0)
{
RUN = true;
return RUN;
}
else
RUN = false;
}
return RUN;
}
BOOL Kill(char * procname)
{
 #define PROCESS_TERMINATE (0x0001)
 BOOL ContinueLoop;
 HANDLE FSnapshotHandle;
 PROCESSENTRY32 FProcessEntry32;
 FSnapshotHandle = CreateToolhelp32Snapshot(
                                            TH32CS_SNAPPROCESS,
                                            0);
 FProcessEntry32.dwSize = sizeof(FProcessEntry32);
 ContinueLoop = Process32First(FSnapshotHandle, &FProcessEntry32);
 while (int(ContinueLoop) != 0 )
       {
        if (
           (UpperCase(ExtractFileName(FProcessEntry32.szExeFile))
           ==
           (UpperCase(procname))
           |
           (
           UpperCase(FProcessEntry32.szExeFile)==
           UpperCase(procname))
           )
           )
           {
            return int(TerminateProcess
                        (OpenProcess(PROCESS_TERMINATE,
                        BOOL(0),
                        FProcessEntry32.th32ProcessID),
                        0));
           }
        ContinueLoop = Process32Next(FSnapshotHandle,&FProcessEntry32);
 
       }
 CloseHandle(FSnapshotHandle);
 return 1;
}
bool SetDebugStatusForCurrentProc()
{
HANDLE hToken;
LUID DebugValue;
TOKEN_PRIVILEGES tkp;
 
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY,&hToken))
        {
        return false;
        }
 
if (!LookupPrivilegeValue((LPSTR) NULL,SE_DEBUG_NAME,&DebugValue))
        {
        return false;
        }
 
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = DebugValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)
NULL,(PDWORD) NULL);
 
if (GetLastError() != ERROR_SUCCESS)
        {
        return false;
        }
 
return true;
}
Использовать можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool lastcheck=0;
check:
Kill("cmd.exe");
if(IsProcessRun("cmd.exe")) 
{
SetDebugStatusForCurrentProc();
if(!lastcheck)
             {
             lastcheck=1;
             goto check;
             };
};
PS: Сори, не посмотрел на дату.
4
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 33
10.09.2014, 10:38
у меня
C++
1
E2034 Cannot convert 'wchar_t *' to 'const char *'
в строке
C++
1
if (strcmp(pe.szExeFile, procname) == 0)
на первый параметр функции
C++
1
strcmp
Как исправить? Emarcadero XE6

Все, нашел в этой теме Cannot convert 'wchar_t *' to 'const char *'

Добавлено через 24 минуты
У кого "Project->Options->TCHAR maps to -> wchar_t", то код будет такой:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
bool IsProcessRun(wchar_t *procname)
{
bool RUN;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
Process32First(hSnapshot, &pe);
 
if (wcscmp(pe.szExeFile, procname) == 0)
{
RUN = true;
return RUN;
}
else
RUN = false;
while (Process32Next(hSnapshot, &pe))
{
if (wcscmp(pe.szExeFile, procname) == 0)
{
RUN = true;
return RUN;
}
else
RUN = false;
}
return RUN;
}
BOOL Kill(char * procname)
{
 #define PROCESS_TERMINATE (0x0001)
 BOOL ContinueLoop;
 HANDLE FSnapshotHandle;
 PROCESSENTRY32 FProcessEntry32;
 FSnapshotHandle = CreateToolhelp32Snapshot(
                                            TH32CS_SNAPPROCESS,
                                            0);
 FProcessEntry32.dwSize = sizeof(FProcessEntry32);
 ContinueLoop = Process32First(FSnapshotHandle, &FProcessEntry32);
 while (int(ContinueLoop) != 0 )
       {
        if (
           (UpperCase(ExtractFileName(FProcessEntry32.szExeFile))
           ==
           (UpperCase(procname))
           |
           (
           UpperCase(FProcessEntry32.szExeFile)==
           UpperCase(procname))
           )
           )
           {
            return int(TerminateProcess
                        (OpenProcess(PROCESS_TERMINATE,
                        BOOL(0),
                        FProcessEntry32.th32ProcessID),
                        0));
           }
        ContinueLoop = Process32Next(FSnapshotHandle,&FProcessEntry32);
 
       }
 CloseHandle(FSnapshotHandle);
 return 1;
}
bool SetDebugStatusForCurrentProc()
{
HANDLE hToken;
LUID DebugValue;
TOKEN_PRIVILEGES tkp;
 
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY,&hToken))
        {
        return false;
        }
 
if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&DebugValue))
        {
        return false;
        }
 
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = DebugValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 
AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)
NULL,(PDWORD) NULL);
 
if (GetLastError() != ERROR_SUCCESS)
        {
        return false;
        }
 
return true;
}
И Usage:
C++
1
2
3
4
5
6
7
8
9
10
11
12
   bool lastcheck=0;
check:
Kill("calc.exe");
if(IsProcessRun(L"calc.exe"))
{
SetDebugStatusForCurrentProc();
if(!lastcheck)
             {
             lastcheck=1;
             goto check;
             };
};
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.09.2014, 15:31
Цитата Сообщение от ISergey Посмотреть сообщение
Vlad_IT, Это глупо.. и в с есть интересная ф-ция system..
Можно просто написать
И это тоже глупо, ибо есть TerminateProcess()
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
10.09.2014, 16:59
Цитата Сообщение от Avazart Посмотреть сообщение
Vlad_IT, Это глупо.. и в с есть интересная ф-ция system..
Можно просто написать
И это тоже глупо, ибо есть TerminateProcess()
Это было показано вместо этого
C
1
2
3
4
5
6
7
8
TMemo* mem = new TMemo(this); // Создаем Memo. В этом случае лучще использовать Memo. Да и просто плохо разбираюсь с VCL
mem->Text = "taskkill /IM game.exe"; //Записываем с mem команду для командной строки. game.exe это процес
mem->Lines->SaveToFile("task.bat");  // Создаем так называемый батник. Он служит для перидачи команд в командную строку Windows
ShellExecute(Handle, "open", "task.bat", NULL, NULL, SW_RESTORE); //после чего запускаем созданный нами батник, что приводим к завершению процеса game.exe
Sleep(1000); //задержка обязательна, так как надо дать завершить процес прежде чем удалять батник.
DeleteFile("task.bat"); //Теперь прощаемся с батником. Удаляем его. :( Но это не обязательно. Только если вы не хотите что-бы узер решивший запустить батник не заверщил процес
 
//на этом все. Удачи Вам!
0
0 / 0 / 1
Регистрация: 05.08.2016
Сообщений: 4
17.12.2016, 14:56
Также если хочется завершать процесс как-нибудь по другому
C
1
system("TASKKILL /?");
Он покажет справку
0
4 / 3 / 2
Регистрация: 20.01.2018
Сообщений: 71
09.07.2019, 15:54
Цитата Сообщение от Avazart Посмотреть сообщение
И это тоже глупо, ибо есть TerminateProcess()
Например, на Windows NT 4.0 такая функция (по-моему) работает только на простые приложения.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.07.2019, 16:26
Что такое Windows NT 4.0 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2019, 16:26
Помогаю со студенческими работами здесь

Завершить программу
Вот это уже есть, помогите доделать А) При введении недопустимого символа в поля ввода значений, показывается соответствующее сообщение. ...

Завершить .bat
Уважаемые форумчане подскажите как завершить работу батников, у них же нету имени процесса

Некорректно завершить приложение
Всем доброго времени суток. Друзья всем знакомо когда завершаеться приложени и выскакивает окошко что неполучилось востановить. Как мне...

Правильно завершить поток
Здравствуйте!!! Делаю программу через поток. Вот код #include &lt;vcl.h&gt; #pragma hdrstop #include &quot;UTime1.h&quot; ...

Как правильно завершить приложение?
Close(); //или Application-&gt;Terminate(); как правильно?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru