Форум "Delphi"
Паскаль, Делфи
#0 Loh 01.07.07 11:31:56 - 03.07.07 21:48:57 как программно выбрать URL-ссылку в IEВ ИнтернетЭксплорер загружена страница - как программно получить доступк ее содержимому и выбрать URL-ссылку
|
|
#1 Vlad © 01.07.07 16:32:55
var Winds: IShellWindows; IEWB: IWebBrowser2; Doc: IHtmlDocument2; i,j:integer; Coll : IHTMLElementCollection; Elem: HTMLInputElement; s:string; begin Winds:=CoShellWindows.Create; for j:=0 to Winds.Count-1 do if (Winds.Item(j) as IWEbBrowser2).Document<>nil then begin IEWB:=Winds.Item(j) as IWEbBrowser2; if IEWB.Document.QueryInterface(IhtmlDocument2, Doc)= S_OK then begin //начало подключения примерно так, далее читать справку |
|
>#1 Vlad © это если страничка отображается в "своем" окне IE. Если же она отображается в родном окне IE, тогда нужно сначала получить доступ к этому окну через COM-интерфейсы. Где-то валялся примерчик (там буквально пару строк) для Excel, как найду - выложу. |
|
хехе... вобщето, я думал что должен пройти вот такой номер по аналогии с офисными приложениями, но судя по всему такой номер не пройдет. var IE : Variant; begin // Ищем запущеный экземплярвызывается исключение IE := GetActiveOleObject('Excel.Application'); .... end; IE регистрирует свои объекты вызовом CoRegisterClassObject с параметром flags=REGCLS_SINGLEUSE. Это означает, что только один клиент может быть подключен к объекту. Наверное, это сделано в целях безопасности. Получается, что возможен доступ только через "свой" IE (IEWB: IWebBrowser2;) как и описывал Влад. |
|
#4 Vlad © 03.07.07 21:48:57
ну дык, скоко часов положил на эту хрень... и причем тут свой-чужой? этот код, например, позволяет подключится к любому экземпляру IE и делать с ним многое. procedure FillAll(CContry,Nationaly,BCountry,Religion,FirstName,Gender,LastName,FatherName,MotherName,HusbandName,BirdthDate,BirdthPlace,Profession,PassportNo,DateOfIssue,ExpirationDate,AddresLine1,AddresLine2,City,Phone:string); var Winds: IShellWindows; IEWB: IWebBrowser2; Doc: IHtmlDocument2; i,j:integer; Coll : IHTMLElementCollection; Elem: HTMLInputElement; s:string; begin Winds:=CoShellWindows.Create; for j:=0 to Winds.Count-1 do if (Winds.Item(j) as IWEbBrowser2).Document<>nil then begin IEWB:=Winds.Item(j) as IWEbBrowser2; if IEWB.Document.QueryInterface(IhtmlDocument2, Doc)= S_OK then begin //начало подключения doc.all.tags('INPUT').QueryInterface(IHTMLElementCollection,coll); for i:=0 to Coll.length-1 do begin //--------------- заполняем типа Input все if (HTMLInputElement(Coll.item(i,varEmpty)).name='FRM_VISA_SINGLE_FORM_B.DEFAULT.F_NM_E.01') then begin HTMLInputElement(Coll.item(i,varEmpty)).value:=FirstName; end; или for i:=0 to Coll.length-1 do begin //--------------- заполняем типа Select все //выбор не понял чего, но что типа один человек if (HTMLInputElement(Coll.item(i,varEmpty)).name='FRM_VISA_SINGLE_FORM_B.DEFAULT.GR_MEN.01') then begin HTMLInputElement(Coll.item(i,varEmpty)).outerHTML:='<SELECT name=FRM_VISA_SINGLE_FORM_B.DEFAULT.GR_MEN.01> <OPTION value=3>Daughter of Main Person<OPTION value=1 selected>Main/Only Person in a Group'+ '<OPTION value=0>Select Group Type<OPTION value=2>Son of Main Person<OPTION value=4>Wife of Main Person</OPTION></SELECT>'; end; // выбор национальности if (HTMLInputElement(Coll.item(i,varEmpty)).name='FRM_VISA_SINGLE_FORM_B.DEFAULT.PRS_NAT.01') then begin s:=HTMLInputElement(Coll.item(i,varEmpty)).outerHTML; s:=AnsiReplaceStr(s,'selected',''); s:=AnsiReplaceStr(s,Nationaly,Nationaly+' selected'); HTMLInputElement(Coll.item(i,varEmpty)).outerHTML:=s; end; писал автозаполнение анкет |
Написать ответ |
|
