Закрытие "чужой" программы, сидящей в трее

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vitaliy
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 14.05.2003 (Ср) 13:35

Закрытие "чужой" программы, сидящей в трее

Сообщение Vitaliy » 12.06.2003 (Чт) 11:50

Может кто знает, что надо сделать:
Моя программа запускает другую программу, которая садится в трей (через SHELL). При выходе из моей программы выгружается и эта запущенная программа (убиваю ее по имени из списка процессов). Но тут проблема: в трее остается иконка выгруженного приложения; при наведении курсора мыши на нее она исчезает. Как мне от этого избавиться? Да и выгрузка приложения из списка процессов не совсем корректна?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.06.2003 (Чт) 16:06

SendMessage hwnd, WM_CLOSE, 0&, 0&
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vitaliy
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 14.05.2003 (Ср) 13:35

Сообщение Vitaliy » 13.06.2003 (Пт) 15:57

А можно поподробнее, пожалуйста :oops:

Dino
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 20.03.2002 (Ср) 20:05
Откуда: Russia

Сообщение Dino » 15.06.2003 (Вс) 6:29

SendMessage - API функция, имеет синтаксис:
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
hwnd - манипулятор окна, которому посылается сообщение;
wMsg - идентификатор сообщения, т.е какой ты сообщение хочешь послать окну:
wParam - эта переменная зависит от сообщения wMsg;
lParam - аналогично wParam (тоже зависит от сообщения).

В твоем случае, как сказал уже GSerg, вызов ф-ии будет осуществлятся так:
SendMessage hwnd,WM_CLOSE, 0&, 0&
WM_CLOSE константа равная &H10

Теперь, если знаешь манипулятор процесса, то можешь его закрыть.
А если не знаешь, то нужно узнать... Например функцией FindWindow, она находит окно по заголовку.

Вот пример программы, которая закрывает виндовую игру "сапер":
Код: Выделить всё
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
     ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As Long
Private Const WM_CLOSE = &H10
Private Sub Command1_Click()
Dim hWind As Long
hWind = FindWindow(vbNullString, "Сапер")
Call SendMessage(hWind, WM_CLOSE, 0&, 0&)
End Sub


Удачи.

Vitaliy
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 14.05.2003 (Ср) 13:35

Сообщение Vitaliy » 17.06.2003 (Вт) 10:36

Спасибо!!! Работает.
Но еще вопрос: у меня эта программа при завершении выдает окно типа "завершить работу" с подтверждением да/нет. Из-за этого я и убивал её процесс. Можно ли и это как-то обойти, чтобы это окно не выскакивало или как-то програмно его закрывать?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 74

    TopList  
cron