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

Discussion in 'WASM.WIN32' started by V1lko, Feb 4, 2009.

  1. V1lko

    V1lko New Member

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

    letopisec New Member

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

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Если я правильно понял
    Code (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 Мастер дзена

    Blog Posts:
    0
    FindWindow/FindWindowEx
     
  5. V1lko

    V1lko New Member

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

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    А чем мой пример плох?
     
  7. Exp10der

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

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

    V1lko New Member

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

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    V1lko рабочий
     
  10. V1lko

    V1lko New Member

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

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

    V1lko New Member

    Blog Posts:
    0
    Mikl___ Чёт не открывает...
     
  12. Noga

    Noga New Member

    Blog Posts:
    0
    V1lko

    Code (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

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

    Noga New Member

    Blog Posts:
    0
    Microedition

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

    Mikl___ Супермодератор Staff Member

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

    Partner Павел

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

    Noga New Member

    Blog Posts:
    0
    Mikl___

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

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    V1lko
    Если требуется конкретнo IE либо какой-то другой браузер, то можно и так
    Code (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 Мастер дзена

    Blog Posts:
    0
    Partner
    Да вы что? :) а я то думал...
    Code (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 Павел

    Blog Posts:
    0
    Exp10der
    Согласен, прогнал. Чего-то вылетело про WM_SETTEXT