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

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

20.06.2008, 13:01. Показов 32754. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru