Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
t116
-
- Бывалый
-
-
- Сообщения: 209
- Зарегистрирован: 12.01.2007 (Пт) 12:11
t116 » 28.02.2008 (Чт) 14:23
Нужно, зная pID программы, закрыть ее из своей программы. Terminate process не подходит т.к. некоторые программы (которые следует закрыть) при этом не сохраняют настройки при выходе. Посылка главной форме программы сигнала WM_QUIT тоже не подходит т.к. главное окно программы неизвестно.
Как можно решить эту задачу?
PS. В поиске нашел только terminate process и SendMessage WM_QUIT.
-
alibek
-
- Большой Человек
-
-
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 28.02.2008 (Чт) 14:44
А как программа закрывается пользователями?
Lasciate ogni speranza, voi ch'entrate.
-
t116
-
- Бывалый
-
-
- Сообщения: 209
- Зарегистрирован: 12.01.2007 (Пт) 12:11
t116 » 28.02.2008 (Чт) 15:31
Все поразному...
Объясню зачем это.
Сделал в своей программе (счетчик трафика) возможность завершать указанные программы при разрыве связи с сетью. Сделал это используя Terminate Process. Но так получается что некоторые программы после terminate оставляют свою иконку в трее и не сохраняют настройки при выходе. Пока не подведешь мышь в трей иконка не исчезнет.
Вот и думаю есть ли более правильный способ закрытия?
ЗЫ. Пробовал еще вариант с выгрузкой всех окон принадлежащих процессу перед terminate, но мне этот способ неочень понравился.
-
Twister
-
- Теоретик
-
-
- Сообщения: 2251
- Зарегистрирован: 28.06.2005 (Вт) 12:32
- Откуда: Алматы
-
Twister » 29.02.2008 (Пт) 8:34
Универсального способа нет.
Посылка главной форме программы сигнала WM_QUIT тоже не подходит т.к. главное окно программы неизвестно.
Его можно попробовать найти.
А я все практикую лечение травами...
-
t116
-
- Бывалый
-
-
- Сообщения: 209
- Зарегистрирован: 12.01.2007 (Пт) 12:11
t116 » 29.02.2008 (Пт) 12:34
Twister писал(а):Его можно попробовать найти.
Как?
Перед выключением Windows закрывает все программы. Каким образом она это делает?
-
Alexanbar
-
- Продвинутый гуру
-
-
- Сообщения: 1727
- Зарегистрирован: 13.04.2004 (Вт) 23:04
- Откуда: Волгоградская обл.
-
Alexanbar » 29.02.2008 (Пт) 23:37
Twister писал(а):Универсального способа нет.
Посылка главной форме программы сигнала WM_QUIT тоже не подходит т.к. главное окно программы неизвестно.
Его можно попробовать найти.
Перечислить все окна через GetWindow
- Код: Выделить всё
hwndParent= GetDesktopWindow()
'get the first child
hWndChild = GetWindow(hwndParent, GW_CHILD)
......
'get the next hwnd
hWndChild = GetWindow(hWndChild, GW_HWNDNEXT)
Далее можно определить для найденных окон имя класса. Ну а затем углубиться внутрь этих окон с целью поиска видимых потомков. Но нужно иметь априорные знания по иерархии окон конкретных родителей.
-
t116
-
- Бывалый
-
-
- Сообщения: 209
- Зарегистрирован: 12.01.2007 (Пт) 12:11
t116 » 02.03.2008 (Вс) 2:10
А если программа не содержит окон?
-
alibek
-
- Большой Человек
-
-
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 03.03.2008 (Пн) 8:56
Если у нее имеется значок в трее, значит и окно есть.
Lasciate ogni speranza, voi ch'entrate.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 64