Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Закрытие процесса по имени exe-шника

13K
13 декабря 2005 года
fel[x]
7 / / 13.12.2005
Уважаемые участники форума.

Возникла небольшая загвоздка.
Задача: завершить процесс, если в наличии есть имя exe файла запущенного в данный момент приложения.
Незаконченное решение:
Используя функцию SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint; передать ей в качестве первого параметра заголовок окна. НО! Его-то мы и не знаем.
Вопрос: как получить заголовок окна, зная имя исполняемого приложения?
1.8K
16 декабря 2005 года
SeregaLBN
62 / / 03.10.2003
Цитата:
Originally posted by fel[x]
Уважаемые участники форума.

Возникла небольшая загвоздка.
Задача: завершить процесс, если в наличии есть имя exe файла запущенного в данный момент приложения.
Незаконченное решение:
Используя функцию SendMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint; передать ей в качестве первого параметра заголовок окна. НО! Его-то мы и не знаем.
Вопрос: как получить заголовок окна, зная имя исполняемого приложения?



Несовсем верно. В качестве первого параметра - дескриптор окна.

Если надо просто убить процесс, то это делается с помощью:

 
Код:
BOOL TerminateProcess(
  HANDLE hProcess,
  UINT uExitCode
);

Что нерекомендуется...
В этом случае поможет уже вышеприведенная ссылка.

Если надо корректно закрыть прогу, нужно послать сообщение WM_CLOSE c помощью SendMessage или PostMessage или PostThreadMessage. Что, кстати, необязано приводить к закрытию проги, всё зависит от конкретной реализации проги.
Для SendMessage и PostMessage нужен дескриптор окна. Для PostThreadMessage нужен идентификатор очереди.
Причем найти надо дескриптор _главного_ окна из _главной_ очереди процесса.
Это делается так:
Зная имя процесса надо перечислить все процессы в системе, найдя нужный хэндл процесса (см. вышеописанную ссылку). В этом процессе надо перечислить все очереди, найдя идентификатор главной очереди (главная очередь определяется по времени её создания). Далее - надо в этой очереди найти все окна (ф-ция EnumThreadWindows). Но как определить главное окно, я незнаю... :(
Поэтому советую пользоватся PostThreadMessage. Здесь используется этот же идентификатор очереди.

Я писал ф-ции поиска очередей и процессов в системе. Вот атаче рабочий пример их использования.
13K
16 декабря 2005 года
fel[x]
7 / / 13.12.2005
Всем большое спасибо. Разобрался.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог