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

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

20.06.2008, 13:01. Показов 33036. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru