100分求购向表单的输入框发送文本的方法(100分)

  • 主题发起人 主题发起人 delphi5lee
  • 开始时间 开始时间
D

delphi5lee

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样向表单的输入框发送文本?最好能给出详细的源代码。如果
分数不够的话小弟可以再加。谢谢
 
哇!真给一百分,那就告诉你吧!快给分。
procedure TForm1.PutData;
var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j,X: integer;
vi: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
iELC : IHTMLElementCollection ;
S,S2 : string;
HtmlInputEle : IHTMLInputElement;
HtmlSelEle : IHTMLSelectElement;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;

for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin

ielc:=idoc1.Get_all;

for j:=0 to ielc.length-1 do
begin
Application.ProcessMessages;
spDisp := ielc.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then
with HtmlInputEle do
begin
S2:=Type_;
S2:=UpperCase(S2);
//我把所有的input都填上 try , checkbox 都打勾
if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then
value :='try' //S:=S+#9+Value
else if StrComp(PChar(S2),'CHECKBOX')=0 then
begin
checked := True;
end;
end;
if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement ,HtmlSelEle))then
with HtmlSelEle, Memo1.Lines do
begin
S:=S+#9+IntToStr(selectedIndex+1); //这个是获取数据了
end;
end; //END FOR
Memo2.Lines.Add(S);
exit;
end;
end;
end;
end;
 
to dana:
这段代码我也看见过,可是我拿去编译老是说什么IShellWindows,IWebBrowser2,
IHTMLDocument2;IHTMLElementCollection,IHTMLElementCollection,
IHTMLSelectElement等等没有定义什么的。是不是要加什么单元或数据模块?
还有这ishellwindows到底为何物?小弟很菜,能不能详细给我解释,如果分数
不够的话我把我剩下的分数全部给你,说话算话,绝不食言
 
在接口中加 mshtml
 
uses shdocvw好像就可以乐.
 
to dana and kinggron:
我结合你们两人的力量就是加上mshtml,shdocvv单元后才编译成功。可是小弟
不懂怎样操作才能向表单出入框发送文本和得到输入框的文本。而且代码也看不
懂什么,能否详细解释一下?谢谢了,我就要发分了----我的所有家产165分
说到做到。
 
function TForm1.PutData:boolean;
var spDisp: IDispatch; j: integer; IDoc1: IHTMLDocument2;
iELC : IHTMLElementCollection ; HtmlInputEle :IHTMLInputElement;// IHTMLInputElement;
formele:IHTMLFormElement; HtmlInputEle1 :IHTMLSelectElement;
HtmlInputEle2:IHtmlTextAreaElement;
begin
if webbrowser <> nil then
begin
webbrowser.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin
ielc:=idoc1.Get_all;
for j:=0 to ielc.length-1 do
begin
Application.ProcessMessages;
spDisp := ielc.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement,HtmlInputEle1))then //这就是向文本框输入值
begin
HtmlInputEle1.value:='北京';
end;

end; //END FOR //Details
end;
result:=true;
end
else result:=false;
end;
 
to dana:
这段代码编译不过去,webbrowser <> nil为不相容的类型。
能给我解释一下代码,谢谢了!!!!!
 
学asp去呵
 
webbrowser就是webbrowser的控件,而最早告诉你的程序中的 IE1 是IE
你可以放几个memo在那时测试一下它们的name、value及其它的属性。
顺便对照下html你就会明白了.
 
OK, do u want the source code in HTML(Jscript / VBscript) or Delphi's Webbrowers?
 
to dana:
不好意思最近几天学校老是上不网,所以没有及时回复,我按你
第一次所说的程序,写了一个程序,可是我不知怎样向表单
输入框发送数据和得到数据。能不能给我解释一下,如果你有
源代码的话能否给我发送一个。我对这方面编程确实很菜啊。谢谢了
到时我一定给你加我所有的分数。
 
首先,你得先确定你是要如何填写网页,
比如是直接要IE上填写,(但是应注意你有可能同是打开几个IE窗口)。
还是用自带的控件webbrowser。

if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then //须ie5支持
with HtmlInputEle do
begin
s1:=HtmlInputEle.name; //名字
S2:=Type_; //类型
S2:=UpperCase(S2);
if (StrComp(PChar(S2),'TEXT')=0) or (StrComp(PChar(S2),'PASSWORD')=0) then
begin
if s1='subject' then HtmlInputEle.values:='主题'; //这就是填写网页,当网页上的编辑框为subject 时。
end;
end;


 
to dana:
不好意思,最近老是不能登录上来。
向表单的输入框发送数据已经实现了,可是还是有个问题,就是能够向有些
输入框发送数据,而有些却不能。我核实过,只要能用ie自带查看源代码工具
能看见的就能够向他发送数据,反之则不能。这个问题能否解决?
 
居然还没给分,回答得真不赖
 
我有简便的方法,一定要给分哟!

function TForm1.FillForm(WebBrowser: TWebBrowser; FieldName,
Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
memo1.Lines.Add(formitem.item(j).name+'value='+formitem.item(j).value);
except
Exit;
end;
end;
end;
end;
 
用PAI吧,最好用的就是API,先用FindWindow和GetWindow获取到你要填写文本的EDIT,然后用SendMessage就可以搞定了,多么轻松的事情。
procedure TForm1.Button1Click(Sender: TObject);
var szText : array[ 0..255 ] of Char;
begin
szText := 'Wgm Is a DFW.';
//发送消息设置编辑框的内容
SendMessage( $13030E,WM_SETTEXT,255,Integer( @szText[0] ) );
ShowMessage( szText );
end;
 
To delphi5lee,
你说的“只要能用ie自带查看源代码工具能看见的就能够向他发送数据,反之则不能。”
---我也碰到这个问题了,原因是网页用了Frame,也就是说我们当前打开的只是一个框架,源文件里只有这个框架里网页的URL地址,等于说这个网页的只是个空壳壳[:(]
例如: www.nowxp.net ,你去看看他的源码就知道了。
我也在找答案,我想解决途径可能是要 IHTMLDocument2 --> IHTMLElementCollection --> IHTMLElement 等,
关注答案,希望高手赐教~
 
后退
顶部