Форум: "WinAPI";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
ВнизРабота с htm- страницами, загруженными браузером. Найти похожие ветки
← →
Kisha © (2006-02-26 14:21) [0]Вот проблема. Пишу программу, которая обращается к Internet Explorer (6.0), при этом в браузере загружена страница, html-код которой содержит:
1) <INPUT name=ans><INPUT type=hidden value=txt name=qtype>
2). <INPUT type=radio value=1 name=ans>
......................................................
<INPUT type=radio value=6 name=ans>
3). <INPUT type=CheckBox value=1 name=ans>
...........................................................
<INPUT type=CheckBox value=6 name=ans>
Как заставить свою программу выставлять галочки и писать значения в такие htm-овские CheckBox, Radio и txt?
Заранее благодарен.
← →
n0name (2006-02-26 19:00) [1]Тебе надо отправлять данные на веб-сервер?
Ил на локальной странице помечать чекбоксы?
← →
Kisha © (2006-02-26 22:32) [2]На локальной странице помечать надо. А потом сам буду отправлять на сервер по нажатии кнопки "Отправить".
← →
n0name (2006-02-27 10:09) [3]А как ты будешь отлавливать это событие?
Я веду всё это к тому, что можно просто послать POST/GET запрос с помошью WinInet.
← →
Style © (2006-02-27 11:42) [4]
> На локальной странице помечать надо. А потом сам буду отправлять
> на сервер по нажатии кнопки "Отправить".
Если нужно заполнить локальную страницу, то проще будет
эмулировать нажатия клавиш...
keybd_event
Для начала только нужно найти окно explorera и сделать его активным, а потом переключатся между "контролами" - элементами формы, можно с помощью клавиши табуляции.
НО!
> <INPUT type=hidden value=txt name=qtype>
значение этого параметра тебе не поменять.
qtype - Это скрытый параметр - изменить его с помощью интерфейса пользователя нельзя...
Поэтому самое правильное решение - это
1) Изучить протокол http.
2) Понять что такое GET и POST параметры
3) Самому сформировать GET/POST запрос, заполнить необходимые данные и отправить на сервер - причем уже не важно как ты это будешь делать, через WinInet или через напрямую через SocketAPI, или вообще воспользуешся сторонними сторонними компонентами... Главное в первую очередь понять как работает http протокол.
Но если тебе вдруг уж действительно так нужно именно заполнять форму...
То я бы воспользовался JavaScript"ом, а не локальной программой...
Cоздал бы свою html страницу, которая в новом окне бы открывала необходимую форуму и заполняла бы все параметры...
← →
NIck Denry © (2006-02-27 16:51) [5]2All, а разве нельзя управлять эксплорером, если создать его как COM-объект? Потом ведь можно получать доступ почти ко всему содердимому, и даже скрипты вызывать ит т.д.
← →
Kisha © (2006-02-27 19:34) [6]Мне нужно чтобы именно проставлялись значения, я должен их видеть перед отправкой, чтобы изучить. Это важно.
← →
Ihor Osov'yak © (2006-02-28 00:15) [7]see, please, mshtml.pas
Потом по всяким умным идентификаторам, обнаруженым там - поиск в гугле, или сразу в msdn - там в секции реюзинг ие браузер или что то типа того - очень много умных и интересных вещей написано.. Или мою статью на Королевстве, писалось давно, не все аккуратно написано - то для начала может быть полезной.. Кажется, в подземелье Магов, название - использование функциональности IE. Правда, там в основном вокруг TWebBrowser, но работа с внешним IE почти не отличается, ньюансы лишь в получении начального IHTMLDocument2
← →
Nick Denry © (2006-02-28 00:29) [8][5],[7]
на чистом апи это будет примерно как:
var
hr : HRESULT;
lpUnk : IUnknown;
WebBr : IWebBrowser2;
EmptyParam : OleVariant;
procedure InitWebBrowserl;
begin
{* Init WebBrowser *}
CoInitialize(nil);
//WebBr := CreateComObject(CLASS_InternetExplorer) as IWebBrowser2;}
lpUnk := nil;
WebBr := nil;
//OleInitialize(nil);
hr := CoCreateInstance(CLASS_InternetExplorer, nil, CLSCTX_SERVER, IUnknown, lpUnk);
hr := lpUnk.QueryInterface(IWebBrowser2, WebBr);
//if Failed(hr) then ShowMessage("Query failed");
WebBr.AddressBar := false;
WebBr.StatusBar := false;
WebBr.MenuBar := false;
WebBr.ToolBar := 0;
WebBr.Left := xPos;
WebBr.Top := yPos;
WebBr.Width := nWidth;
WebBr.Height := nHeight;
WebBr.Visible := true;
WebBr.Navigate(GetARootDir+ szInfoShellPath+"start.htm",
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
end;
← →
Nick Denry © (2006-02-28 00:33) [9]Правда для ТWebBrowser"a но все же:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, MSHTML, ExtCtrls;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
PageLoaded : boolean;
document : IHTMLDocument2;
img1 : IHTMLImgElement;
n : integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
curPage : string;
begin
curPage := GetCurrentDir+"\HTML_02\"+ "index.html";
WebBrowser1.Navigate(curPage);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PageLoaded := false;
n := 0;
end;
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
PageLoaded := true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if PageLoaded = false
then ShowMessage("You must load the page")
else begin
if WebBrowser1.Document <> nil then begin
form1.webBrowser1.Document.QueryInterface(IHTMLDocument2, document);
document.images.item("img1",0).QueryInterface(IHTMLImgElement, img1);
if Timer1.Enabled = false then Timer1.Enabled := true;
end;
end;
document._Release;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if n = 0 then begin
img1.src := GetCurrentDir+"\HTML_02\pyramid_sm_h.jpg";
n := 1;
end
else
begin
img1.src := GetCurrentDir+"\HTML_02\pyramid_sm.jpg";
n := 0;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled := false;
img1.src := GetCurrentDir+"\HTML_02\pyramid_sm.jpg";
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Timer1.Enabled := false;
img1.src := GetCurrentDir+"\HTML_02\pyramid.jpg";
end;
end.
← →
Игорь Шевченко © (2006-02-28 01:19) [10]
> на чистом апи
Это грязный апи
← →
Nick Denry © (2006-02-28 01:31) [11]Согласен, но не важно.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c