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

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

03.02.2011, 18:14. Показов 39875. Ответов 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
8484 / 6151 / 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
8484 / 6151 / 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru