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

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

03.02.2011, 18:14. Показов 40068. Ответов 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
1465 / 966 / 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
1465 / 966 / 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
1465 / 966 / 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
1465 / 966 / 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
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.09.2014, 15:31
Цитата Сообщение от ISergey Посмотреть сообщение
Vlad_IT, Это глупо.. и в с есть интересная ф-ция system..
Можно просто написать
И это тоже глупо, ибо есть TerminateProcess()
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru