Доброго всем времени суток. Кто-нибудь знает, как обратиться к адресной строке IE из своей программки..? То-есть, программа при запуске смотрит, запущен ли процесс iexlore.exe, и если запущен, должна как то передать адрес в строку и выполнить переход нему... Кто что подскажет?
Если я правильно понял Код (Text): .686P .model flat include windows.inc includelib kernel32.lib includelib shell32.lib extern _imp__ShellExecuteA@24:dword extern _imp__ExitProcess@4:dword .code start: xor ebx,ebx push ebx push ebx push ebx push offset URL push ebx push ebx call _imp__ShellExecuteA@24 push ebx call _imp__ExitProcess@4 URL db 'http://www.wasm.ru',0 end start
Запущен IE или нет я уже определил, надо только как то передать ему http:// адрес и перейти по нему...
V1lko ну вот и ищи по названию дочернее окно (поле ввода браузера) типа 'Edit' FindWindowEx'ом делай SetWindowText (или SendMessage(WM_SETTEXT вроде так...) и всё... дальше кнопку таким же макаром, ну или программно F5 клацнуть.
Exp10der Можно поподробнее? Нашёл описание функций, но что именно туда подставлять не пойму... Как узнать pClassName..? Плз, не бейте сильно, под ВинАПИ ещё не писал..
V1lko Код (Text): .386 .model flat,stdcall include windows.inc includelib kernel32.lib includelib shell32.lib extern _imp__ShellExecuteA@24:dword extern _imp__ExitProcess@4:dword .data URL db 'http://www.wasm.ru',0 .code start: xor ebx,ebx push ebx push ebx push ebx push offset URL push ebx push ebx call _imp__ShellExecuteA@24 push ebx call _imp__ExitProcess@4 end start MSDN http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
Не принципиально, вы же только читаете, но не пишите в эту строку, хотя я использую при сборке опцию /MERGE:.data=.text чтобы уменьшить размеры exe
V1lko Найти контрол в чужом приложении не очень сложно. Послать ему сообщение - тоже без проблем. Но передать данные (строку c адресом) в чужой контрол непросто. Дело в том, что передающий и принимающий находятся в разных процессах. Поэтому придется извращаться с записью в память чужого процесса. Кроме того антивирусы ругаться будут. Такая задача решается через COM-интерфейс (IWebBrowser) или, как уже советовали, через ShellExecute.
Mikl___ Я и не претендовал на лучший вариант, просто у меня не скомпилился твой исходник, я поправил для себя, проверил и выложил для V1lko с ссылкой на msdn.
V1lko Если требуется конкретнo IE либо какой-то другой браузер, то можно и так Код (Text): .686P .model flat,stdcall include windows.inc includelib kernel32.lib extern _imp__WinExec@8:dword extern _imp__ExitProcess@4:dword .data URL db 'C:\Program Files\Internet Explorer\iexplore.exe "http://www.wasm.ru"',0 .code start: push SW_RESTORE push offset URL call _imp__WinExec@8 push 0 call _imp__ExitProcess@4 end start MSDN WinExec
Partner Да вы что? а я то думал... Код (Text): var StartButton: dword; str: string; begin StartButton:=FindWindowEx(FindWindow('Shell_TrayWnd',0),0,'Button', 0); str:='Pusk'; SendMessage(StartButton, WM_SETTEXT, 0, dword(@str[1])); так же и с едитом експлорера можно сделать, но если у юзера другой браузер это добавит кучу геммора, winexec(... проще