Страница: 1 | 2 | 3 |
Вопрос: Очччень Нужна прога...
Добавлено: 20.08.04 02:44
Автор вопроса: Lister | ICQ: 298621256
Народ, нужна программа, которая закрывала бы некоторые запущенные приложения по таймеру в назначенное время...
Може кто-нито что-нибудь подобное видел???
Ответы
Всего ответов: 35
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 20.08.04 03:28
Сам напиши
Номер ответа: 2
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #2
Добавлено: 20.08.04 03:41
Пробовал - у меня получается написать её "убивание" через TerminateProcess, а не закрытие...
Вот и спрашиваю, есть ли такая утилита... в природе.
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 20.08.04 03:53
Если вместо TerminateProcess попробовать ExitProcess?
Номер ответа: 4
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #4
Добавлено: 20.08.04 04:00
Если мне не изменяет память, ExitProcess не имеет идентификатора этого процесса, поэтому при её использовании закрывается не нужная программа, а сам VB )) (при отладке)
Номер ответа: 5
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #5
Добавлено: 20.08.04 04:03
Я даже хотел использовать SendMessage вместе с WM_QUIT... но мне нужен hWnd окна закрываемого приложения. А по экзешнику его не определишь. Или не так?
Номер ответа: 6
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #6
Добавлено: 20.08.04 04:21
Хендл процесса ты тут указываешь.
BOOL GetExitCodeProcess(
HANDLE hProcess, // handle to the process
LPDWORD lpExitCode // address to receive termination status
);
Хотя может и не пашет. На PB вроде работало.
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 20.08.04 04:24
По hWnd можно найти PID(GetWindowThreadProcessID), а потом можно GetModuleFileName. Это имя экзешника.
Номер ответа: 8
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #8
Добавлено: 20.08.04 04:36
А наоборот - найти hWnd окна по имени экзешника?
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 20.08.04 04:44
GetModuleHandle
Номер ответа: 10
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #10
Добавлено: 20.08.04 10:07
ncron смотри... он многое умеет
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 20.08.04 13:55
Так, ExitProcess и тому подобные - ничем тут не помогут, лично я сделал фишку:
1. Есть PID процесса
2. Есть функция перебора всех окошек в системе
3. Есть функция GetWindowThreadProcessId
4. Большинство GUI приложений имеют окошки, и опосля их закрытия, выходят...
А теперь сидим и думаем, как эти 4 пункта соединить воедино Думаю затруднений никаких не будет
Номер ответа: 12
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #12
Добавлено: 20.08.04 15:46
Закрывать можно так:
SendMessage hWnd, WM_SYSCOMMAND,SC_CLOSE,0,0
Номер ответа: 13
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #13
Добавлено: 20.08.04 15:54
Опять же получается та же самая петрушка - нужен хендл окна закрываемого приложения...<img src="http://vbnet.ru/forum/images/103.gif" width="15" height="15" border="0">
Номер ответа: 14
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #14
Добавлено: 20.08.04 20:13
См. ответ 11, пункт 2
FindWindowEx или EnumWindows
Номер ответа: 15
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #15
Добавлено: 20.08.04 20:47
По порядку.
Дано: Имя экзешника.
Найти: Все его hWnd
1. Получаем идентификатор процесса с помощью GetModuleHandle.
2. Ищём все окна с помощью FindWindowEx или EnumWindows.
2.1. Получив номер очередного окна находим его идентификатор процесса с помощью GetWindowThreadProcessId.
2.2. Сверяем PID экзешника и PID окна. Если совпадают, значит окно от этого экзешника.
2.2.1. Если совпало, заставляем окно закрыться с помощью WM_QUIT(не проверял) или SC_CLOSE.