Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.011 c
4-1141325287
NightLord
2006-03-02 21:48
2006.05.21
Вывод на рабочий стол


4-1140957510
Topepo
2006-02-26 15:38
2006.05.21
Запуск EXE в контексте моей программы


2-1146661404
AlexanderMS
2006-05-03 17:03
2006.05.21
Проблема с ListBox


2-1146315859
Volf_555
2006-04-29 17:04
2006.05.21
Как в строке заменить один слєш на 2 слєша?


2-1146561020
Юнкер
2006-05-02 13:10
2006.05.21
Как лучше зашифровать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский