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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение текущего URL из браузера 
:(
    Опции темы
VictorGr
Дата 20.7.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ЗДРАВСТВУЙТЕ!

У меня вопрос такой:

можно ли мне программой (на VB6) получить текущий адрес (URL) открытой страницы в браузере?

Честно говоря, желательно найти приёмы для всех браузеров  (IE6-7, Firefox, Opera, Safari...).

Такое возможно? smile Хотя бы в каком направлении смотреть?

Спасибо smile
PM MAIL WWW   Вверх
bartram
Дата 20.7.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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




M
bartram
Перемещена из MS Windows



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Akina
Дата 20.7.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Любой браузер имеет СОМ-интерфейс. Получив PID экземпляра браузера, можно запросить требуемую информацию.

VB6 не имеет штатных средств для выполнения поставленной задачи - это проблема, решаемая на уровне API.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bom
Дата 21.7.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

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



Пример для всех окон IE:
Код

    Dim Shell1, ShellWindows, IE, url As String
    Set Shell1 = CreateObject("Shell.Application")
    Set ShellWindows = Shell1.Windows
    Set IE = CreateObject("InternetExplorer.Application")
    
    For Each IE In ShellWindows
        If LCase(TypeName(IE.document)) = "htmldocument" Then url = url & IE.LocationURL & vbCr
    Next
    
    If Len(url) Then MsgBox url Else MsgBox "Nothing found"
    Set Shell1 = Nothing
    Set ShellWindows = Nothing
    Set IE = Nothing

PM MAIL   Вверх
Akina
Дата 22.7.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



bom, красиво.

А не валится, если у Shell.Application.Windows(i) нет свойства document?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
VictorGr
Дата 22.7.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bom, класс! Работает, спасибо!

А на FF, Opera такое сработает?


Akina, ещё слышал о DDE. Оно вообще встроено прямо в VB.
http://community.livejournal.com/ru_programming/799908.html?

Для IE удалось получать URL, но только последнего (самого правого на панели задач) окна.
PM MAIL WWW   Вверх
Akina
Дата 22.7.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(VictorGr @  22.7.2007,  20:06 Найти цитируемый пост)
слышал о DDE. Оно вообще встроено прямо в VB.

Вообще-то это одна из технологий взаимодействия - динамический обмен данными,- встроена в операционную систему и к какому-либо отдельному языку программирования никакого отношения не имеет. Как, впрочем, и СОМ...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bom
Дата 22.7.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

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



Цитата(Akina @  22.7.2007,  21:35 Найти цитируемый пост)
не валится, если у Shell.Application.Windows(i) нет свойства document?

Не пробовал перебирать все окна подряд.  У InternetExplorer.Application это св-во имеется, но можно и подстраховаться, организовав обработчик ошибок, если что.

Цитата(VictorGr @  22.7.2007,  22:06 Найти цитируемый пост)
А на FF, Opera такое сработает?

Вряд ли. Как сказал Akina,  у каждого браузера свой интерфейс взаимодействия.

Цитата(VictorGr @  22.7.2007,  22:06 Найти цитируемый пост)
Для IE удалось получать URL, но только последнего (самого правого на панели задач) окна.

Покажи код.

PM MAIL   Вверх
VictorGr
Дата 23.7.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

    On Error GoTo errorhandler

      label1.LinkTopic = "IExplore|WWW_GetWindowInfo"
      label1.LinkItem = "0xffffffff"
      label1.LinkMode = 2
      label1.LinkRequest

    errorhandler:
        Resume Next


Вот такой код. Получает URL самого крайнего IE.
PM MAIL WWW   Вверх
bom
Дата 24.7.2007, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

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



Про DDE не знаю, поищи в MSDN
PM MAIL   Вверх
VictorGr
Дата 24.7.2007, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bom, искал...

А вопрос о COM: можно ли получить объект IE (как Вы указали выше) по его HWND или по номеру процесса? Ваш способ работает на отлично, но, он достаточно "тяжёлый" для моей программы: довольно заметно, как программа притормаживает.

А мне бы было достаточно получать URL активного в текущий момент окна. (Чьё hwnd и номер процесса я знаю) smile.

Искал в интернете... Но Гугль -- такая штука smile Он фразу поиска, где есть литеры "COM" не воспринимает smile.
PM MAIL WWW   Вверх
bom
Дата 24.7.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

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



Если HWND родительского окна известен, можно получить текст дочернего достаточно легко с помощью API:

Код

'В форме - Label1:

Private Sub Form_Load()
Call EnumChildWindows(HWND, AddressOf WndEnumChildProc, Label1)
End Sub


'В модуле:

Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hwndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Any) As Long
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE

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), "comboboxex32") Then lb = 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

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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