Нашёл код обнаруживающий HWND окна броузер контрола, а как о

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

Нашёл код обнаруживающий HWND окна броузер контрола, а как о

Сообщение eugene2005 » 22.06.2007 (Пт) 3:36

Нашёл код обнаруживающий HWND окна броузер контрола, а как обнаружить его iframes, frames?


Код: Выделить всё
Dim lHandle As Long
lHandle = GetHandle(ie)
MsgBox lHandle


Код: Выделить всё
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private lngWebHandle As Long



Public Function GetHandle(ByVal WebControl As WebBrowser) As Long
    lngWebHandle = 0
    EnumChildWindows WebControl.Parent.hWnd, AddressOf EnumChildProc, ByVal 0&
    GetHandle = lngWebHandle
End Function


Private Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    Dim lngReturnValue As Long, strClassName As String
    strClassName = Space(256)
    lngReturnValue = GetClassName(hWnd, strClassName, 256)
    If Left$(strClassName, lngReturnValue) = "Internet Explorer_Server" Then
        lngWebHandle = hWnd
    End If
    EnumChildProc = 1
End Function


[Хакер] :: Впредь оформляй код тегами [cоde] ... [/code] или [syntаx="vb"] ... [/syntаx] !

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 22.06.2007 (Пт) 7:06

А для чего тебе нужны хэндлы фреймов? Это к тому, что сам пытался решить одну задачу подобным образом, но решение оказалось более простым...
Salus populi suprema lex

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.06.2007 (Пт) 9:31

eugene2005, никак, ибо фрэймы не окна
Весь мир матрица, а мы в нем потоки байтов!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.06.2007 (Пт) 9:58

Код: Выделить всё
Option Explicit
Private Type UUID
   Data1 As Long
   Data2 As Integer
   Data3 As Integer
   Data4(0 To 7) As Byte
End Type

Private Const SMTO_ABORTIFHUNG = &H2
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Long, riid As UUID, ByVal wParam As Long, ppvObject As Any) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long

Public Function IEDOMFromhWnd(ByVal hwnd As Long) As IHTMLDocument
Dim IID_IHTMLDocument As UUID
Dim hWndChild As Long
Dim lRes As Long
Dim lMsg As Long
Dim hr As Long
    lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
    SendMessageTimeout GetUrlWindow(hwnd, , "Internet Explorer_Server"), lMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes
    If lRes Then
        With IID_IHTMLDocument
            .Data1 = &H626FC520
            .Data2 = &HA41E
            .Data3 = &H11CF
            .Data4(0) = &HA7
            .Data4(1) = &H31
            .Data4(2) = &H0
            .Data4(3) = &HA0
            .Data4(4) = &HC9
            .Data4(5) = &H8
            .Data4(6) = &H26
            .Data4(7) = &H37
        End With
        hr = ObjectFromLresult(lRes, IID_IHTMLDocument, 0, IEDOMFromhWnd)
    End If
End Function
А там уж и до фреймов не далеко.
Лучший способ понять что-то самому — объяснить это другому.

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 26.06.2007 (Вт) 21:02

а что тогда frame iframe?

http://www.codeproject.com/atl/MouseGestures.asp

This worked quite well for IE 6.0, but I found that when in a multiframe document, IE 5.0 implements the following window hierarchy (IE 6.0 always uses the simple hierarchy above):

Each frame is displayed in the lower level Internet Explorer_Server windows. Initially, all I thought I would have to do is to extend the ParentNotifyTracker mechanism to watch for the creation of Shell Embedding windows, and track the mouse gestures in multiple Internet Explorer_Server windows.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 27.06.2007 (Ср) 0:25

2eugene2005, не печалься Жень, здесь, видно, тоже не специалисты собрались :(

тебе ж сто раз везде сказали, что надо через DOM делать ???

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.06.2007 (Ср) 11:14

Если работать через HWND, то не факт, что всё будет корректно с другими версиями IE. А DOM документирован.
Изображение

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

Сообщение alibek » 27.06.2007 (Ср) 12:55

NashRus, ты сможешь через DOM кликнуть на рекламе Google AdSense?
Lasciate ogni speranza, voi ch'entrate.

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 28.06.2007 (Чт) 6:58

неужели кроме mouse_event нет возможности никакой?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.06.2007 (Чт) 9:12

eugene2005 писал(а):Each frame is displayed in the lower level Internet Explorer_Server windows.
Не знаю, откуда автор этого заявления почерпнул эту информацию, но Spy++ с ним не согласен. Internet Explorer_Server - единственное и последнее окно иерархии, подчиненных нет. И это правильно. И сделано это за тем же, зачем закрыт доступ через DOM во фреймы, ведущие на другие сайты. Ибо нех.
Лучший способ понять что-то самому — объяснить это другому.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 28.06.2007 (Чт) 10:13

alibek писал(а):NashRus, ты сможешь через DOM кликнуть на рекламе Google AdSense?


не пробывал, не надо как то. вот Женя кликер, вот пусть и кликает.

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

Сообщение alibek » 28.06.2007 (Чт) 10:17

NashRus писал(а):Женя кликер, вот пусть и кликает.

Ну это конечно да :)
Тем не менее, это может быть причиной, почему надо кликать mouse_event, а не через DOM.
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList