Адресная строка iexlore.exe

Тема в разделе "WASM.WIN32", создана пользователем V1lko, 4 фев 2009.

  1. V1lko

    V1lko New Member

    Публикаций:
    0
    Доброго всем времени суток.
    Кто-нибудь знает, как обратиться к адресной строке IE из своей программки..?
    То-есть, программа при запуске смотрит, запущен ли процесс iexlore.exe, и если запущен, должна как то передать адрес в строку и выполнить переход нему...
    Кто что подскажет?
     
  2. letopisec

    letopisec New Member

    Публикаций:
    0
    вот пример работы с контролами чужого окна
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Если я правильно понял
    Код (Text):
    1. .686P
    2. .model flat
    3. include windows.inc
    4. includelib kernel32.lib
    5. includelib shell32.lib
    6. extern _imp__ShellExecuteA@24:dword
    7. extern _imp__ExitProcess@4:dword
    8. .code
    9. start:  xor ebx,ebx
    10.     push ebx
    11.     push ebx
    12.     push ebx
    13.     push offset URL
    14.     push ebx
    15.     push ebx
    16.     call _imp__ShellExecuteA@24
    17.     push ebx
    18.     call _imp__ExitProcess@4
    19. URL db 'http://www.wasm.ru',0
    20. end start
     
  4. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    FindWindow/FindWindowEx
     
  5. V1lko

    V1lko New Member

    Публикаций:
    0
    Запущен IE или нет я уже определил, надо только как то передать ему http:// адрес и перейти по нему...
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    А чем мой пример плох?
     
  7. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    V1lko ну вот и ищи по названию дочернее окно (поле ввода браузера) типа 'Edit' FindWindowEx'ом делай SetWindowText (или SendMessage(WM_SETTEXT вроде так...) и всё... дальше кнопку таким же макаром, ну или программно F5 клацнуть.
     
  8. V1lko

    V1lko New Member

    Публикаций:
    0
    Mikl___, а он рабочий?
    Немного непонятно каким образом строка с адресом передаётся именно в IE...
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    V1lko рабочий
     
  10. V1lko

    V1lko New Member

    Публикаций:
    0
    Exp10der Можно поподробнее?
    Нашёл описание функций, но что именно туда подставлять не пойму...
    Как узнать pClassName..?

    Плз, не бейте сильно, под ВинАПИ ещё не писал..
     
  11. V1lko

    V1lko New Member

    Публикаций:
    0
    Mikl___ Чёт не открывает...
     
  12. Noga

    Noga New Member

    Публикаций:
    0
    V1lko

    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. include windows.inc
    4. includelib kernel32.lib
    5. includelib shell32.lib
    6. extern _imp__ShellExecuteA@24:dword
    7. extern _imp__ExitProcess@4:dword
    8. .data
    9. URL db 'http://www.wasm.ru',0
    10. .code
    11. start:  xor ebx,ebx
    12.     push ebx
    13.     push ebx
    14.     push ebx
    15.     push offset URL
    16.     push ebx
    17.     push ebx
    18.     call _imp__ShellExecuteA@24
    19.     push ebx
    20.     call _imp__ExitProcess@4
    21. end start
    MSDN http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
     
  13. Microedition

    Microedition Active Member

    Публикаций:
    0
    ShellExecute, вроде, запускает браузер, установленный по умолчанию в системе. Не так ли?
     
  14. Noga

    Noga New Member

    Публикаций:
    0
    Microedition

    Да. В msdn все написано.
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Не принципиально, вы же только читаете, но не пишите в эту строку, хотя я использую при сборке опцию /MERGE:.data=.text чтобы уменьшить размеры exe
     
  16. Partner

    Partner Павел

    Публикаций:
    0
    V1lko
    Найти контрол в чужом приложении не очень сложно. Послать ему сообщение - тоже без проблем. Но передать данные (строку c адресом) в чужой контрол непросто.
    Дело в том, что передающий и принимающий находятся в разных процессах. Поэтому придется извращаться с записью в память чужого процесса.
    Кроме того антивирусы ругаться будут.
    Такая задача решается через COM-интерфейс (IWebBrowser) или, как уже советовали, через ShellExecute.
     
  17. Noga

    Noga New Member

    Публикаций:
    0
    Mikl___

    Я и не претендовал на лучший вариант, просто у меня не скомпилился твой исходник, я поправил для себя, проверил и выложил для V1lko с ссылкой на msdn.
     
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    V1lko
    Если требуется конкретнo IE либо какой-то другой браузер, то можно и так
    Код (Text):
    1. .686P
    2. .model flat,stdcall
    3. include windows.inc
    4. includelib kernel32.lib
    5. extern _imp__WinExec@8:dword
    6. extern _imp__ExitProcess@4:dword
    7. .data
    8. URL db 'C:\Program Files\Internet Explorer\iexplore.exe "http://www.wasm.ru"',0
    9. .code
    10. start:  push SW_RESTORE
    11.     push offset URL
    12.     call _imp__WinExec@8
    13.     push 0
    14.     call _imp__ExitProcess@4
    15. end start
    MSDN WinExec
     
  19. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Partner
    Да вы что? :) а я то думал...
    Код (Text):
    1. var StartButton: dword; str: string;
    2. begin
    3. StartButton:=FindWindowEx(FindWindow('Shell_TrayWnd',0),0,'Button', 0);
    4. str:='Pusk';
    5. SendMessage(StartButton, WM_SETTEXT, 0, dword(@str[1]));
    [​IMG]
    так же и с едитом експлорера можно сделать, но если у юзера другой браузер это добавит кучу геммора, winexec(... проще
     
  20. Partner

    Partner Павел

    Публикаций:
    0
    Exp10der
    Согласен, прогнал. Чего-то вылетело про WM_SETTEXT