Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/176: Рейтинг темы: голосов - 176, средняя оценка - 4.77
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574

Убить процесс, зная имя.exe

20.06.2008, 13:01. Показов 32807. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!
Подскажите как убить процесс, зная его имя, есть вот такой примерчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
 short KillThisProcess=0;
   HANDLE hProcessSnap = NULL;
   PROCESSENTRY32 pe32 = {0};
   AnsiString NameKillProcess = "Сalc.exe";
   hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
   pe32.dwSize = sizeof(PROCESSENTRY32);
   if (Process32First(hProcessSnap, &pe32))
   do
     if(AnsiString(pe32.szExeFile)==NameKillProcess)KillThisProcess++;
   while (Process32Next(hProcessSnap, &pe32));
   CloseHandle (hProcessSnap);
   if (KillThisProcess>1)Application->Terminate();
но он не работает, ошибку не выдает, просто ниче не делает(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2008, 13:01
Ответы с готовыми решениями:

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

Как убить процесс IExplore.exe (и все его дочерние процессы), запущеный командой ShellExecute?
То есть, я сам запускаю експлорер, ShellExecute(0,"open","IEXPLORE.EXE","http://192.168.0.11:8000/?action=System.Restart",...

Убить процесс
Кто ни будь знает как можно программно убить процесс ?

49
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
02.10.2011, 17:59
Студворк — интернет-сервис помощи студентам
Samrisbe,

Шас на XE попробую, если справлюс скажу...

Добавлено через 31 минуту
Samrisbe,
C++
1
Label1->Caption=(GetPIDbyName(Label2->Caption ));
Работает нормално

А попробуй заменить тут

C++
1
DWORD GetPIDbyName(LPTSTR szProcessName)
DWORD на AnsiString (Я на UnicodeString заменил и работает)
А LPTSTR тоже на AnsiString и поправ в фунцкцию тоже...

А лучше установы ХЕ, Чего голову мучиш?
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
02.10.2011, 18:11
У меня rad studio XE 2010 стоит уже. Этот исхлдник в Builder 6 работал нормально а в rad studio XE забастовал.
Всеравно не хочет.
Скинь исходник который у тебя скомпелировался плиз, я посмотрю может я опять не там правлю.
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
02.10.2011, 18:29
Samrisbe,
Ну вот, пожайлуйста, в ХЕ работает отлично
С LPTSTR тоже работает

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#include <tlhelp32.h>
#pragma hdrstop
 
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;
HANDLE mutex;
//---------------------------------------------------------------------------
DWORD GetPIDbyName(UnicodeString szProcessName)
{
        HANDLE hSnapshot;
        PROCESSENTRY32 pe = {sizeof(pe)};
 
        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hSnapshot == INVALID_HANDLE_VALUE)
                return 0;
 
        if (!Process32First(hSnapshot, &pe))
                return 0;
 
        do
 
                if(!lstrcmpi(pe.szExeFile,szProcessName.w_str()))
                        return pe.th32ProcessID;
        while (Process32Next(hSnapshot, &pe));
        return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
    : TForm(Owner)
{
HANDLE PHandle;
PROCESSENTRY32 ProcEntry;
BOOL Result;
Result=false;
PHandle = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize = sizeof(PROCESSENTRY32);
Process32First(PHandle, &ProcEntry);
        do
        {
        ListBox1->Items->Add(ExtractFileName(ProcEntry.szExeFile));//выводим все процессы в ListBox
        }
        while(Process32Next(PHandle, &ProcEntry));
CloseHandle(PHandle);
}
//---------------------------------------------------------------------------
void __fastcall TForm5::ListBox1Click(TObject *Sender)
{
Label2->Caption=ListBox1->Items->Strings[ListBox1->ItemIndex]; //помещаешь на форму LabeledEdit2 можно просто Edit и при нажатии на процесс в ListBox1 он помещается в LabeledEdit2
Label1->Caption=(GetPIDbyName(Label2->Caption ));
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button1Click(TObject *Sender)
{
HANDLE hProcess;
        DWORD pid;
        pid = StrToInt(Label1->Caption); // считываем id нужного процесса из LabeledEdit1 и убиваем его
        hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
        TerminateProcess(hProcess, 0xDEAD);
        CloseHandle(hProcess);
}
//---------------------------------------------------------------------------
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
02.10.2011, 18:51
Может у мея чегото не хватает в самой Rad Studii однако ошибки выдает все теже
C++
1
2
[BCC32 Error] Unit5.cpp(30): E2034 Cannot convert 'wchar_t *' to 'const char *'
[BCC32 Error] Unit5.cpp(30): E2342 Type mismatch in parameter 'lpString2' (wanted 'const char *', got 'wchar_t *')
вот на эту строку:
C++
1
   if(!lstrcmpi(pe.szExeFile,szProcessName.w_str()))
Прикрепи сам исходник без Debug папки. если он у меня заглючит значит надо искать студию и переустановить.
1
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
02.10.2011, 20:18
Samrisbe,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DWORD GetPIDbyName(UnicodeString szProcessName)
{
                HANDLE hSnapshot;
                PROCESSENTRY32 pe = {sizeof(pe)};
 
                hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
                if (hSnapshot == INVALID_HANDLE_VALUE)
                                return 0;
 
                if (!Process32First(hSnapshot, &pe))
                                return 0;
 
                do
 
                                if(!lstrcmpi(pe.szExeFile,szProcessName.w_str()))
                                                return pe.th32ProcessID;
                while (Process32Next(hSnapshot, &pe));
                return 0;
}
Не знаю, вот так у меня работает, и до етого не било ошибок
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.10.2011, 01:37
если все правильно сделано, w_str в RAD XE быть не должно, толко с_str
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
03.10.2011, 11:01
Цитата Сообщение от LK Посмотреть сообщение
если все правильно сделано, w_str в RAD XE быть не должно, толко с_str
Почтенная публика нуждается в совете опытного программиста по решению последней ошибки:

C++
1
[BCC32 Error] Unit1.cpp(58): E2316 'с_str' is not a member of 'UnicodeString'
все в тойже строке:

C++
1
LabeledEdit1->Text= IntToStr(GetPIDbyName(LabeledEdit2->Text.с_str())); // id процесса помещается в LabeledEdit1
У меня есть подозрения что в Project\Options надо настроить или в катклоге нехватает кокогото хедера...
На всякий случай приклеплю весь код:

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
#include <vcl.h>
#pragma hdrstop
#include <tlhelp32.h>
#include <windows.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
//для вывода имени процессов т.е. exe
DWORD GetPIDbyName(LPTSTR szProcessName)
{
        HANDLE hSnapshot;
        PROCESSENTRY32 pe = {sizeof(pe)};
 
        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hSnapshot == INVALID_HANDLE_VALUE)
                return 0;
 
        if (!Process32First(hSnapshot, &pe))
                return 0;
 
        do
                if(!lstrcmpi(pe.szExeFile,szProcessName))
                        return pe.th32ProcessID;
        while (Process32Next(hSnapshot, &pe));
        return 0;
}
 
 
 
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
// выводим все процессы в ListBox
HANDLE PHandle;
PROCESSENTRY32 ProcEntry;
BOOL Result;
Result=false;
PHandle = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize = sizeof(PROCESSENTRY32);
Process32First(PHandle, &ProcEntry);
        do
        {
        ListBox1->Items->Add(ExtractFileName(ProcEntry.szExeFile));//выводим все процессы в ListBox
        }
        while(Process32Next(PHandle, &ProcEntry));
CloseHandle(PHandle);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
LabeledEdit2->Text=ListBox1->Items->Strings[ListBox1->ItemIndex]; //помещаешь на форму LabeledEdit2 можно просто Edit и при нажатии на процесс в ListBox1 он помещается в LabeledEdit2
LabeledEdit1->Text= IntToStr(GetPIDbyName(LabeledEdit2->Text.с_str())); // id процесса помещается в LabeledEdit1
        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// убиваем по id
HANDLE hProcess;
        DWORD pid;
        pid = StrToInt(LabeledEdit1->Text); // считываем id нужного процесса из LabeledEdit1 и убиваем его
        hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
        TerminateProcess(hProcess, 0xDEAD);
        CloseHandle(hProcess);
//обновляем список процессов
ListBox1->Clear();
HANDLE PHandle;
PROCESSENTRY32 ProcEntry;
BOOL Result;
Result=false;
PHandle = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize = sizeof(PROCESSENTRY32);
Process32First(PHandle, &ProcEntry);
        do
        {
        ListBox1->Items->Add(ExtractFileName(ProcEntry.szExeFile));//выводим все процессы в ListBox
        }
        while(Process32Next(PHandle, &ProcEntry));
CloseHandle(PHandle);
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.10.2011, 22:39
примерно так
C++
1
2
AnsiString lbe_txt = LabeledEdit2->Text;
(GetPIDbyName(lbe_txt.c_str() ));
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
03.10.2011, 23:26
Все работает! Спасибо LK!
теперь мне можно идти спать

Добавлено через 23 минуты
Рано обрадовался этот наш диспечер задач определяет ID не всех процессов, а именно на всех процессах носящих имя svchost.exe, не может определить и выдает в LabeledEdit1 всегда 728.
0
0 / 0 / 0
Регистрация: 05.09.2013
Сообщений: 4
05.09.2013, 21:12
НА 10 билдере компилирую и вылазит такая ошибка: [ILINK32 Error] Fatal: Unable to open file 'TRAYICON.OBJ'. В чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2013, 21:12
Помогаю со студенческими работами здесь

Закрыть программу, зная ее имя
подскажите плз, код закрытия программы, зная ее имя

Зная имя нажатой кнопки SpeedButton сменить ей картинку
Всем привет! использую StringGrid на котором есть несколько колонок. сверху над StringGrid поставил SpeedButton-ы в Events по нажатию...

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

Узнать ip-адрес компьютера по сети, зная его имя в сети
Ребята подскажите, пожалуйста, по такому вопросу. Как можно узнать ip-адрес компьютера в сети зная его имя в сети, только не своего...

Как убить процесс зная текст его формы?
Не могу найти не где информацию по этому Нужно убить процесс по названию приложения не по самому процессу! Допустим Steam, но если его...


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

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru