ark писал(а):2. Хэндл у контрола есть, и скорее всего, хранится для внутреннего пользования где-нибудь сразу за VTABLE. Попробуй посмотреть первые 100-200 байт за ObjPtr
Нашел место, где контрол свой хедл прячет. И хранится он по смещению &H3C(60). Ну и заодно нашел и другие места где его можно найти. Таких мест оказалось 3
![Smile :)](./images/smilies/icon_smile.gif)
Мне интересно, а почему именно был указан диапазон 100-200 Байт?
ark писал(а):Ну, так есть ChildWindowFromPoint(Ex)
Тут есть небольшая заминка
- Код: Выделить всё
Private Declare Function ChildWindowFromPoint Lib "user32.dll" (ByVal hWndParent As Long, ByVal pt As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
В объявлении указано, что структура передается по значению. Я сначала думал, что ошибка в декларации, но оказалось что нет, действительно структура должна передаваться по значению. Но VB так делать не умеет
![Sad :(](./images/smilies/icon_sad.gif)
. Конечно в этом случае можно не париться со структурой, и сделать:
Declare Function ChildWindowFromPoint Lib "user32.dll" (ByVal hWndParent As Long, ByVal x As Long, ByVal y As Long) As LongНо возникает вопрос, может все таки можно исхитриться и передать как то структуру ByVal? Хорошо, в этом случае всего два поля и передать их по отдельности не проблема, а вот если структура не такая простая? Или таких случаев в принципе не бывает? Я тоже удивился, до этого не разу не встречал передачу структуры ByVal. И еще, если таким образом структуру пихать с стек, то какое поле должно идти первым?
Qwertiy писал(а):GetWindowClass
Может GetClassName?