Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить URL веб браузера, Как определить активный URL браузера 
:(
    Опции темы
Евгений1000
Дата 15.10.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Как программой на VB6 определить активный адрес URL в веб браузере?
На странице http://forum.vingrad.ru/topic-164401.html эта тема обсуждалась, следуя инструкциям участника bom http://forum.vingrad.ru/index.php?showtopi...t&p=1205737, у меня просто запускается Form1 с Label1, адрес URL не отображается! помогите, очень нужно!
PM MAIL   Вверх
~FoX~
Дата 15.10.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Евгений1000, Для начала надо хендл (HWND) узнать
Код

Call EnumChildWindows(HWND, AddressOf WndEnumChildProc, Label1)

Для этого нужно использовать API FindWindow
Вот описание:
Код

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long




--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
~FoX~
Дата 16.10.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Иееех, молодееееж  smile  smile  smile 
Смысл прост:
1. Ищем окно по заголовку
2. Ищем в нем адресную строку
3. Дергаем с нее содержимое

Код модуля:
Код

Option Explicit

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal Hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Public Declare Function EnumChildWindows Lib "user32" (ByVal hwndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Any) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetWindow Lib "user32" (ByVal Hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal Hwnd As Long, ByVal lpString As String, ByVal aint As Long) As Long

Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE

Public Const GWCHILD = 5
Public Const GWHWNDNEXT = 2
Public Const MAXLEN = 255

Function WndEnumChildProc(ByVal Hwnd As Long, ByVal lb As Label) As Long
Dim ClName As String * 50
  GetClassName Hwnd, ClName, 50
  If InStr(LCase(ClName), "edit") Then MsgBox (GetText(Hwnd)) '***********
  WndEnumChildProc = 1
End Function
Private Function GetText(Hwnd As Long) As String
Dim Text As String * 1024
  Call SendMessage(Hwnd, WM_GETTEXT, 1024, ByVal Text)
  GetText = Text
End Function



Я реализовал функцию поиска хэндла окна по части заголовка...
Код формы:
Код

Function fEnumWindows(SerchWord As String) As Long 'поиск окна по чати заголовка
Dim lngx As Long, lngLen As Long, i As Long
Dim strCaption As String
  fEnumWindows = 0
  lngx = GetDesktopWindow()
  lngx = GetWindow(lngx, GWCHILD)
  Do While Not lngx = 0
    strCaption = fGetCaption(lngx)
    If Len(strCaption) > 0 Then
      If InStr(1, UCase(strCaption), UCase(SerchWord)) <> 0 Then
        fEnumWindows = lngx
      End If
   End If
lngx = GetWindow(lngx, GWHWNDNEXT)
Loop
End Function

Private Function fGetClassName(Hwnd As Long)
Dim strBuffer As String
Dim intCount As Integer
  strBuffer = String$(MAXLEN - 1, 0)
  intCount = GetClassName(Hwnd, strBuffer, MAXLEN)
  If intCount > 0 Then fGetClassName = Left$(strBuffer, intCount)
End Function

Private Function fGetCaption(Hwnd As Long)
Dim strBuffer As String
Dim intCount As Integer
  strBuffer = String$(MAXLEN - 1, 0)
  intCount = GetWindowText(Hwnd, strBuffer, MAXLEN)
  If intCount > 0 Then
    fGetCaption = Left$(strBuffer, intCount)
  End If
End Function

Private Sub CommandButton1_Click()
Dim ExHWND As Long
  ExHWND = fEnumWindows("Explorer")
  If ExHWND <> 0 Then Call EnumChildWindows(ExHWND, AddressOf WndEnumChildProc, Label1)
End Sub



*** Если честно, я не знаю какой класс у адресной строки в IE8, но combobox32 там нету, а под рукой младших версий осла не подвезли поэтому методом перебора нашел edit... Так же хрен знает какого класса адресные строки в опере, лисе и хроме...
Но это уже лирика, код 100% ищет окно IE8 и получает адрес активной страницы...

Это сообщение отредактировал(а) ~FoX~ - 16.10.2010, 18:32


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Евгений1000
Дата 16.10.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Огромное спасибо, все работает! а возможно-ли результат выводить не в Msgbox а в Textbox, для дальнейших манипуляций с ним?
PM MAIL   Вверх
~FoX~
Дата 17.10.2010, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Евгений1000, 
Замени
Код

If InStr(LCase(ClName), "edit") Then MsgBox (GetText(Hwnd)) '***********

на что нить вроде 
Код

If InStr(LCase(ClName), "edit") Then Form1.TextBox1.Text = GetText(Hwnd)



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.