Perexvat

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

Perexvat

Сообщение f0rbeed » 04.05.2003 (Вс) 16:33

Вот что нужно:

Ловить системные message box'ы(Служба сообщений) и читать то что в них написано. А потом их соответственно закрывать и так чтобы это было незаметно.
Так быстро, что незаметно...

Yurik
Постоялец
Постоялец
 
Сообщения: 553
Зарегистрирован: 08.04.2002 (Пн) 21:09
Откуда: Нижневартовск [Rulez 4ever]

Сообщение Yurik » 04.05.2003 (Вс) 16:58

Ну я тя запросы...
Тебе бы сразу к Дядюшке Билли или прямое письмо в Microsoft!

------------------------------------------------------------

ЗЫ: Без обид!

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 04.05.2003 (Вс) 21:19

одно могу пока сказатиь - это вполне реально... но как, не помнню... вроде как этот вопрос уже возникал... :roll:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.05.2003 (Пн) 8:40

Ты имеешь ввиду сообщения, рассылаемые Net Send? Есть два способа -- сложный и неправильный :)
Неправильный -- имеется невидимая форма с таймером. На таймере перебираются все открытые окна, и если имеется окно с соответствующим заголовком "Messenger Service", то его содержимое копируется в буфер (через GetWindowText), а окну посылается WM_CLOSE.
А правильным будет остановить сервис "Messenger", создать свой майлслот с именем messngr и обрабатывать его.
Lasciate ogni speranza, voi ch'entrate.

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 07.05.2003 (Ср) 14:02

А как перебирать все окна? Можно ли примерчик?
Так быстро, что незаметно...

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 07.05.2003 (Ср) 18:47

я делал так:

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long

Public Function GetCaption(lhWnd As Long) As String
Dim sA As String, lLen As Long
lLen = GetWindowTextLength(lhWnd)
sA = String(lLen, 0)
Call GetWindowText(lhWnd, sA, lLen + 1)
GetCaption = sA
End Function

Public Function DLHFindWin(frm As Form, WinTitle As String, CaseSensitive As Boolean) As Long
Dim lhWnd As Long, sA As String
lhWnd = frm.hwnd
Do
DoEvents
If lhWnd = 0 Then Exit Do
If CaseSensitive = False Then
sA = LCase(GetCaption(lhWnd))
WinTitle = LCase(WinTitle)
Else
sA = GetCaption(lhWnd)
End If
If InStr(sA, WinTitle) Then
DLHFindWin = lhWnd
Exit Do
Else
DLHFindWin = 0
End If
lhWnd = GetNextWindow(lhWnd, 2)
Loop
End Function

Sub showwinds()
List1.Clear
For i = 1 To 255
If DLHFindWin(Me, Chr(i), False) <> 0 Then
wind = GetCaption(DLHFindWin(Me, Chr(i), False))

For k = 0 To List1.ListCount
If List1.List(k) = wind Then b = True
Next

If b = False Then List1.AddItem wind Else b = False
End If
Next
End Sub

Private Sub Command1_Click()
Call showwinds
End Sub

'а вот так убивать:

Private Sub kill_Click()
hwind = DLHFindWin(Me, List1.List(List1.ListIndex), False)
CloseWindow hwind
End Sub

сорри за объём, главное что работает :)

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 07.05.2003 (Ср) 21:57

2 Леха: Да это как будто аналог Таскменеджера в win9x. Дело в том что, получается так что этот MsgBox там не виден. То есть он своим hwnd будто бы не обладает. Так что не знаю что делать. У кого есть win 2k - попробуйте.
P.S А по СloseWindow окно не закрывается, надо SendMessage слать.
Так быстро, что незаметно...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 12.05.2003 (Пн) 8:49

Класс окна #32770, но надо и дочернии проверять, так как, у многих окон такой класс, например у диалога открытия файлов и Counter-Strike))))))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 12.05.2003 (Пн) 19:59

А как этот класс окна использовать? И как содержимое этого окна получить? А то что я не особо понял на счет caption'а.
Так быстро, что незаметно...

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 18.05.2003 (Вс) 23:01

Ну ладно с классом понятно, а как Лабел то читать?
Так быстро, что незаметно...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 19.05.2003 (Пн) 10:14

SPY++ и вперёд!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 19.05.2003 (Пн) 16:53

???
Так быстро, что незаметно...

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 19.05.2003 (Пн) 17:05

ну в студии есть программа такая. кажется в пункте VC++ sdk при инсталляции.

а из программы ты label не прочтеш, так как этот контрол не имеет hwnd и не является окном, как остальные контролы.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 19.05.2003 (Пн) 23:23

Ладно, а как его закрыть? И вот еще что: а нельзя ли как нибудь скопировать в буффер, ведь в 2к при появлении мсгбокса и нажатии ctrl-c содержимое копируется в буффер.
Так быстро, что незаметно...

GriKo
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.10.2002 (Пт) 22:30
Откуда: Israel

Сообщение GriKo » 21.05.2003 (Ср) 10:39

короче, не знаю как в 2к, но на ХР ничерта не пашет. это было понятно, так как действительно за МысычБоксом такая фича как hWnd в общем и не числиться... с С как снять (который ++) я вобщем знаю
с ВБ - извените...
BIL - GEY... TSSS...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.05.2003 (Ср) 13:35

Все можно
VB'шный Label действительно не имеет hWnd, но в том MsgBox используется не Label, там стандартный элемент с классом "Static" и с него можно без проблем считать содержимое с помощью API GetWindowText.
Т.е. через FindWindow ищешь системный MsgBox (с заголовком "Messenger Service"). Затем в помощью FindWindowEx ищешь в нем первый элемент с именем класса "Static" (он там единственный) и считываешь через GetWindowText.
Lasciate ogni speranza, voi ch'entrate.

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 03.06.2003 (Вт) 22:45

А как GetWindowText использовать? Можно ли на примере?
Так быстро, что незаметно...

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 03.06.2003 (Вт) 23:41

Код: Выделить всё
Private Sub TellPlz()
Dim wnd As Long
Dim A As String, ALen As Long
    wnd = FindWindowEx(FindWindow("#32770", "Служба сообщений"), 0, "Static", "")
    ALen = GetWindowTextLength(wnd)
    Call GetWindowText(wnd, A, ALen+1)
    MsgBox A
End Sub

Что то не работает... hwnd получается, а вот остальные две функции не дают ничего... Странно все это...
Так быстро, что незаметно...

f0rbeed
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 18.12.2002 (Ср) 17:51
Откуда: Russia

Сообщение f0rbeed » 04.06.2003 (Ср) 19:19

Ну так что скажите то?
Так быстро, что незаметно...

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

Сообщение GSerg » 05.06.2003 (Чт) 9:02

А буфер кто будет инициализировать? Пушкин? :wink:
Код: Выделить всё
A = Space$(ALen)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 103

    TopList  
cron