Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2010, 14:58   #1
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию Убить процесс по заголовку окна

Нашёл функицю KillProgram, но есть проблема она закрывает процесс если указать точное название окна, тоесть если ввести не полное то работать нечего небудет. Нужно сделать следющее:
На кнопку вешаем

procedure TForm1.Button1Click(Sender: TObject);
begin
killprogram(nil, 'Взлом');
end;

и если в любом названии окна будет слово взлом, например

Цитата:
Как взломать сервер?
Процедура немедленно закроет данное окно.


Сама процедура:
Код:
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
process_terminate = $0001;
var
processhandle : thandle;
processid: integer;
thewindow : hwnd;
begin
thewindow := findwindow(pchar(classname), pchar(windowtitle));
getwindowthreadprocessid(thewindow, @processid);
processhandle := openprocess(process_terminate, false, processid);
terminateprocess(processhandle,4);
end;
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 14:59   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Собственно, в чем проблема? Или Вы просто хотели поделиться радостной вестью с окружающими?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 20.01.2010, 15:02   #3
Сергeй
Заблокирован
 
Регистрация: 14.01.2010
Сообщений: 92
По умолчанию

FindWindow() для такой задачи не подходит.
Нужна EnumWindows()
Сергeй вне форума Ответить с цитированием
Старый 20.01.2010, 15:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Nice42ru
Во-первых: Присоединяюсь к Сергею. И добавлю что можно в таймере брать заголовок окна, хендл которого возвращается функцией GetForegroundWindow - это то которое впереди всех, и его закрывать.
Во-вторых: Ты точнее задачу выложи, ато ведь не обязательно заголовок будет соответствовать содержимому.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2010, 15:27   #5
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Собственно, в чем проблема? Или Вы просто хотели поделиться радостной вестью с окружающими?
Проблема в том что данный код закрывает окно только при том условии, если указано точное название окна, а мне надо сделать чтобы оно было не точное а содержало то что я писал выше
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 15:42   #6
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Во-первых: Присоединяюсь к Сергею. И добавлю что можно в таймере брать заголовок окна, хендл которого возвращается функцией GetForegroundWindow - это то которое впереди всех, и его закрывать.
Во-вторых: Ты точнее задачу выложи, ато ведь не обязательно заголовок будет соответствовать содержимому.
Тоесть тот код что я дал выше, он закрывает только тогда, когда значение указанно точно

Код:
killprogram(nil, 'Безымянный - Блокнот');
Если указать
Код:
killprogram(nil, 'Блокнот');
То ничего не закроется, а нужно сделать чтобы при
Код:
killprogram(nil, 'Блок');
Закрывались все окна, в названии окон которых есть "Блок"
Примеры
Цитата:
Безымянный - Блокнот
Блокировка - Opera
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 16:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Nice42ru
Тебе же сказали: EnumWindows или GetForegroundWindow дадут хендлы(хендл) окон(окна впереди), в его обработчике через pos проверяй есть ли в заголовке такая подстрока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2010, 16:13   #8
Nice42ru
Форумчанин
 
Регистрация: 25.10.2009
Сообщений: 131
По умолчанию

Цитата:
Сообщение от Сергeй Посмотреть сообщение
FindWindow() для такой задачи не подходит.
Нужна EnumWindows()
Нужно заменить
Код:
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
process_terminate = $0001;
var
processhandle : thandle;
processid: integer;
thewindow : hwnd;
begin
thewindow := findwindow(pchar(classname), pchar(windowtitle));
getwindowthreadprocessid(thewindow, @processid);
processhandle := openprocess(process_terminate, false, processid);
terminateprocess(processhandle,4);
end;

На

Код:
procedure KillProgram(ClassName: PChar; WindowTitle: PChar);
const
process_terminate = $0001;
var
processhandle : thandle;
processid: integer;
thewindow : hwnd;
begin
thewindow := EmumWindows(pchar(classname), pchar(windowtitle));
getwindowthreadprocessid(thewindow, @processid);
processhandle := openprocess(process_terminate, false, processid);
terminateprocess(processhandle,4);
end;
да?
Nice42ru вне форума Ответить с цитированием
Старый 20.01.2010, 16:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
да?
Нет. Забей в поиск по форуму EmumWindows и увидишь кучу примеров.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2010, 16:32   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
EmumWindows
опечаточка
EnumWindows
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как убить процесс зная его имя? One.Love Win Api 14 18.02.2012 14:31
Как убить процесс(с++) progdev Общие вопросы C/C++ 2 22.11.2009 21:30
Событие click по заголовку формы? Polotenchik Общие вопросы Delphi 3 24.06.2009 12:48
убить процесс по его идентификатору - Работа с процессами ACE Valery Общие вопросы C/C++ 8 04.06.2009 21:51
Убить процесс, md5, архивация Igoressicus Помощь студентам 1 16.01.2009 10:37