Страница: 1 | 2 | 3 |
Вопрос: Насчёт hWnd
Добавлено: 20.01.06 22:57
Автор вопроса: Xrum
Получить hWnd контрола чужого окна вообще возможно?
Ответы
Всего ответов: 34
Номер ответа: 1
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #1
Добавлено: 20.01.06 23:27
http://www.mentalis.org/apilist/EnumChildWindows.shtml
Номер ответа: 2
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #2
Добавлено: 21.01.06 16:38
Есть такия функция WindowFromPoint(x,y). Первая даст хэндл окна по координатам (x,y).
Могу еще дать ссылочку (в добавок к вышеприведенной): http://www.vb.kiev.ua/ref/w32api/showdoc.php?f=enumchildwindows
Номер ответа: 3
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #3
Добавлено: 21.01.06 17:35
FindWindow - хендл родительского окна по классу/имени
FindWindowEx - хендл дочерник окон.
А причём здесь EnumChildWindows? Нужно узнать хендл ОКНА, а не перечислить все объекты.
Номер ответа: 4
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #4
Добавлено: 21.01.06 18:00
Вот так поперечисляете и авось и найдете что надо. Поданные Вами 2 функции находят хендлы, но если вы знаете имя класса. А если нет - то спользуйте EnumChildWindows. Вариаций много: можно найти дочернее окно (тот же контрол) по заголовку, можно узнать имя класса, его размеры, положение и т. д. Есть еще функция EnumWindows, которая перечисляет окна верхнего уровня, с которыми можно сделать то же самое.
Номер ответа: 5
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #5
Добавлено: 21.01.06 19:39
Уважаемый vbman, данные мною 2 функции находят не только по классу, но и по заголовку, предложения вами функция может быть полезна только в случае, когда нужно отсеить/найти контролы по их свойствам.
Номер ответа: 6
Автор ответа:
Xrum
Вопросов: 14
Ответов: 14
Профиль | | #6
Добавлено: 21.01.06 20:08
Не понял. Имея хендл окна и используя EnumChildWindows я получу перечень хендлов его контролов?
Номер ответа: 7
Автор ответа:
Xrum
Вопросов: 14
Ответов: 14
Профиль | | #7
Добавлено: 21.01.06 20:43
Исследуемое окно дочерних не имеет
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 21.01.06 21:05
2 Антон
Да, Enumить надо, vbman прав...
Держи ф-цию перечесления всех контролов, зная хендел окна
'Перечесляет все элементы в указанном окне
Dim c As Byte, t As Integer
Dim sText As String
Dim sClass As String
sClass = Space$(128)
c = GetClassName(hWnd, sClass, 128)
If c > 0 Then
sClass = Left$(sClass, c)
sText = Space$(128)
t = GetWindowText(hWnd, sText, 128)
ReDim Preserve TextBoxTxt(Counter)
TextBoxTxt(Counter) = "[" & sClass & "] = " & Chr(34) & Left$(sText, t) & Chr(34) & " (" & hWnd & ""
Counter = Counter + 1
End If
EnumElement_ = 1
End Function
Public Sub EnumElement(hWndParent As Long)
'Перечесляет все элементы в указанном окне
EnumChildWindows hWndParent, AddressOf EnumElement_, 0&
End Sub
Нужные API найди плиз сам, у меня в модуле там всё перемешано, все API насыпом... Используй для этого API Text Viewer, он вместе с VB идёт...
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 21.01.06 21:06
P.S.
Вызывать та шо паблик ессно
Номер ответа: 10
Автор ответа:
Xrum
Вопросов: 14
Ответов: 14
Профиль | | #10
Добавлено: 21.01.06 22:56
ВОТ!!!! СПАСИБО!!!!!
Номер ответа: 11
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #11
Добавлено: 21.01.06 23:30
А кто путает людям голову? Ты хочешь сказать в связке FindWindow & FindWindowEx я не смогу узнать заголовок кнопки или лабела? Смогу, на ВБ такое не писал, зато писал на ассемблере, поэтому могу точно сказать!!! Другое дело, что конечно не все контролы имеют заголовок, тут мой метод обламывается...
Номер ответа: 12
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #12
Добавлено: 22.01.06 00:56
Что ты имеешь ввиду под "заголовком кнопки" или "заколовком лабела"?
Номер ответа: 13
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #13
Добавлено: 22.01.06 09:11
2HACKER:
На счет Caption наверное? ...
Номер ответа: 14
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #14
Добавлено: 22.01.06 12:33
Короче, я запутался
Попытаюсь объяснить... Я писал когда-то лоадер для программ защищённых Armadillo(кто не в курсе, это довольно хороший протектор исполняемых файлов со своим, встроенным, диалогом и алгоритмом регистрации, которая могла навешиваться на защищаемые этим протектором программы), который должен был брать данные из лабела, искать их в памяти, менять на валидные и "нажимать" на кнопку OK... так вот был диалог, на нём кнопоки OK и Cancel, находил я хендл этого диалога с помощью FindWindow по классу и заголовку, потом передавая этот хендл в FindWindowEx по классу(Button) и заголовку(OK) я находил хендл кнопки, ну а после SendMessage с параметром BM_CLICK... Почти так же находил хендлы текстовых полей и меток...
Номер ответа: 15
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #15
Добавлено: 22.01.06 21:44
Ну так заголовок окна то, что если на форме (диалоге) было бы
несколько кнопок с Caption "ОК" (А не заголовком как ты говоришь, а то это
понять по разному можно...) х.з. какой хендел тебе вернула бы
FindWindowEx, скорее тот который меньше, а х.з. какой тебе нужен был
бы на самом деле... Аналогичная ситуация когда кнопка вообще без
Caption... Вот для таких целей и перечесляют все дочерние хенеделы
окна...