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

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

20.06.2008, 13:01. Показов 32838. Ответов 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
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
20.06.2008, 13:10
пример убийства экплорера, может поможет:
Code
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
KillExplorer(int id)
{
   HANDLE ps = OpenProcess(1, false, id);
   if (ps)
    TerminateProcess(ps, -9);
}
bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/)
{
   unsigned long* pPid;   //LPDWORD
   unsigned long result;      //DWORD
   void *hg;                  //HGLOBAL
   unsigned long id;
   if(hWnd==NULL)
      return false;
   hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
   pPid = (unsigned long *)GlobalLock(hg);
   result = GetWindowThreadProcessId(hWnd,pPid);
   if(result){
      char title[110];
      char className[95];
      GetClassName(hWnd,className,95);
      GetWindowText(hWnd,title,110);
      id=*pPid;
      AnsiString str = "";
      str = (AnsiString)title;
      if (str.AnsiPos("Program Manager") != 0)
        KillExplorer(id);
      Form1->ListBox1->Items->Add((AnsiString)totalStr);
   }
   else{
      GlobalUnlock(hg);
      GlobalFree(hg);
      return false;
   }
   GlobalUnlock(hg);
   GlobalFree(hg);
   return true;
}
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
21.06.2008, 13:54
Есть еще вариант через консоль "taskkill". Убивает процесс(ы) по имени или идентификатору.. Думаеццо, тоже подходит. Зато не требуется углубленное понимание WinAPI. Мне так проще. Если нужна более подробная инфа - пишите. Сделаю цитаты из книги "Коммандная строка Windows"
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
23.06.2008, 09:25  [ТС]
Цитата Сообщение от dioxidin Посмотреть сообщение
Есть еще вариант через консоль "taskkill". Убивает процесс(ы) по имени или идентификатору.. Думаеццо, тоже подходит. Зато не требуется углубленное понимание WinAPI. Мне так проще. Если нужна более подробная инфа - пишите. Сделаю цитаты из книги "Коммандная строка Windows"
так мне процесс надо убивать из своей проги, прога стоит на 40 серверах, я же не буду на каждом килять вручную))))
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
24.06.2008, 12:24
Причем здесь вручную...? Ааааа Я не написал про отправку команд в сист. консоль... Так надо пользовать функцию ShellExecute() Посмотри в хелпах (например, в BDS2006). Я где-то цитировал.. наверное удалили.. Можно из своей проги выполнять конслоьные команды.
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
25.06.2008, 11:35  [ТС]
Цитата Сообщение от dioxidin Посмотреть сообщение
Причем здесь вручную...? Ааааа Я не написал про отправку команд в сист. консоль... Так надо пользовать функцию ShellExecute() Посмотри в хелпах (например, в BDS2006). Я где-то цитировал.. наверное удалили.. Можно из своей проги выполнять конслоьные команды.
вот в консольном приложении наваял

ShellExecute (0, NULL, "c\WINDOWS\system32\cmd.exe", "taskklill /f /im myproga.exe", NULL,0);

с командной строки прибивает, а с проги не хочет, может че не так указал?
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
25.06.2008, 14:58
Может Хэндл своего окна передать?
Еще может поэкспериментировать с последним параметром? SW_HIDE и Ноль - одно и то же?
Наверное надо папку указать - предпоследний параметр...

Цитата Сообщение от FreeWay
"c\WINDOWS\system32\cmd.exe"
Во-первых, там удваивать косые надо, а во-вторых после С двоеточия нет.. Кстати, такая команда и в консоли не должна проходить.. Полный путь, к тому же, можно не писать для cmd.exe.

Добавлено через 1 час 17 минут
Нашел еще способ...
В книге Архангельского "BCB6" есть описание функций вызова приложения из своего.
Code
1
int execlp(char *path, char *arg0,...,argn,NULL)
и
Code
1
int spawnlp(int mode, char *path, char *arg0,...,argn,NULL)
Поищи на них хелп или саму книгу возьми (Глава 7).
Еще продвинутей функция
Code
1
int WinExec(const char *CmdLine, unsigned int CmdShow)
0
 Аватар для dioxidin
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
08.07.2008, 14:48
Еще нарыл:
http://www.microsoft.com/techn... x?mfr=true

Там как раз описан скрипт, убивающий процесс по его "вымени.exe"
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
04.05.2009, 08:53
По принципу кода WooDooMan'а, написал процесс киллер, вот код:

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
#include <vcl.h>
#include <stdlib.h>
#include <Tlhelp32.h>
#include <fstream.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void KillProcess(int id)
{
   HANDLE ps = OpenProcess(1, false, id);
   if (ps)
    TerminateProcess(ps, -9);
}
int IsProcessRunning( char * pName )
{
int id_p;
strlwr( pName );
HANDLE snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
PROCESSENTRY32 pe;
char pExeName[256];
for( BOOL r=Process32First(snapshot, &pe); r; r=Process32Next(snapshot, &pe) )
{
        strcpy(pExeName, pe.szExeFile);
        strlwr(pExeName);
if( std::string(pName)==pExeName )
{
        id_p=pe.th32ProcessID;
        CloseHandle(snapshot);
        return id_p;
}
}
CloseHandle(snapshot);
return 0;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Interval=StrToInt(Edit2->Text);
Timer1->Enabled=true;
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
char * pname=new char[255];
memset(pname,'\0',255);
strcat(pname,Edit1->Text.c_str());
if (IsProcessRunning(pname)!=0){
KillProcess(IsProcessRunning(pname));
Label1->Caption="Process killed";
Timer1->Enabled=false;
}else{
i++;
Label1->Caption=i;
}
delete []pname;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled=false;
}
Добавлено через 1 минуту 40 секунд
Программным методом убивает процессы
2
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
13.05.2009, 10:05  [ТС]
супер, если все гладко пашет, можно вынести в фак))
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.05.2009, 10:17
Гладко там все, ток код подкоректировать , там много лишнего, а так работает
Основные функции для работы IsProcessRunning() проверка, запущен ли процесс, так же возвращаемая пид процесса, и KillProcess() собсьтвенно посылка сигнала процессу "убица", кстати есть вариант поэксперементировать с сигналами, возможно думаю есть возможность не просто килять процесс, а послать сигнал для корректного завершения,ну если надо конечно
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
13.05.2009, 10:25
AlexSt, много лишнего потому, что не мой код, когда нашли в нете... особо с кодом не игрался... тем более это просто указание, куда копать, а не оптимальное решение...
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.05.2009, 10:32
WooDooMan, Ну да, поигратся тут есть с чем, думаю каждый найдет в этом коде то что ему нужно.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
13.05.2009, 10:50

Не по теме:

AlexSt

Не по теме:

, а это самое главное - педагогический эффект)))

0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
13.05.2009, 10:56
0
 Аватар для Gremlin
519 / 307 / 58
Регистрация: 30.07.2008
Сообщений: 607
16.05.2009, 11:54
Code
1
WinExec("taskkill.exe /f /im Project1.exe", SW_HIDE);
Я не парюсь и делаю гораздо проще (хотя это не отлтчный вариант, но все же)
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
16.05.2009, 19:52
Цитата Сообщение от Gremlin Посмотреть сообщение
Code
1
WinExec("taskkill.exe /f /im Project1.exe", SW_HIDE);
(хотя это не отлтчный вариант, но все же)
Я делал так когда был маленький, теперь делаю как надо
0
45 / 45 / 1
Регистрация: 23.05.2009
Сообщений: 92
25.07.2009, 03:49
Цитата Сообщение от VoodooMan Посмотреть сообщение
У меня вопрос по поводу функции GetWindowThreadProcessId
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LPCTSTR WindowTitle2= L"C:\\Windows\\system32\\cmd.exe";
DWORD *ProcessId; //идентификатор процесса
HWND hwnd;          //дескриптор окна
hwnd=FindWindow(NULL, WindowTitle2);
  if (hwnd == 0) // если программа не запущена, то сообщаем об этом
  {
    MessageBox(0, L"Программа не запущена!", L"Ошибка!", MB_OK+MB_ICONERROR);
    exit(1);
  }
GetWindowThreadProcessId(hwnd, ProcessId);
//В режиме выполнения выдает такую ошибку
//неинициализированная переменная ProcessId используется
//насколько я понимаю действие этой функции, как раз и заключается
//в инициализации ProcessId по hwnd
hwnd инициализируется, когда запускаю прогу с заголовком
C:\Windows\system32\cmd.exe(делал отладку)
Скажите почему не инициализируется ProcessID?
Есть ли какие-то другие способы инициализации ProcessId?
0
29 / 24 / 8
Регистрация: 25.10.2009
Сообщений: 265
25.10.2009, 14:28
Меня вот что интересует. Я хочу написать резидента, который будет закрывать определённый список приложений, но если изменить имя exe файла, то таким способом я его уже не отловлю. Отсюда вопрос, как закрыть процесс не по имени ехе файла, а по имени приложения? Ведь оно постоянно, как бы не назывался ехе файл, а вот имя процесса зависит от имени ехе.
0
Волшебник
 Аватар для Rapsod
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
16.04.2010, 17:05
Цитата Сообщение от Gremlin Посмотреть сообщение
Code
1
WinExec("taskkill.exe /f /im Project1.exe", SW_HIDE);
Я не парюсь и делаю гораздо проще (хотя это не отлтчный вариант, но все же)
А как сделать с переменной? Например, что бы с помощью Editа можно было бы менять название программы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2010, 17:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru