WebBrowser自动填充打开文件对话框

WebBrowser自动填充打开文件对话框

在使用WebBrowser编写自动表单填写软件的时候,不知道大家是否遇到国填写文件选择表单的情况。遇到这种情况的时候,无法直接队Html元素赋值,必须模拟手工选择的办法(是否有其它解决办法,不得而知),下面我们来说一下我的解决办法,如下:

1、先说一下正常表单的填写方式,在Delphi+WebBrowser的环境下,可采用如下代码:


1

WebBrowser.OleObject.document.all.item(‘XXX‘, 0).value :=xxx;

2、针对于文件选择表单,我们可以先模拟一下点击,打开文件选择对话框:


1

WebBrowser.OleObject.document.all.item(‘click‘, 0).value;

3、然后我们采用枚举子窗体的办法,找到文件输入位置,及"确定"按钮,以模拟选择文件:


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

//...

function EnumProc(Hwnd: THandle; LB: LongInt): Boolean; stdcall;

//...

function EnumProc(Hwnd: THandle; LB: LongInt): Boolean; stdcall;

var CName: array[0..255] of char;

  path: string;

  i: integer;

begin

  GetClassName(Hwnd, CName, 255);

  if CName = ‘Edit‘ then

  begin

    path := extractfilepath(Application.ExeName) + ‘检索\‘ + nameStr + ‘.bmp‘;

    for i := 1 to length(path) do

    begin

      PostMessage(Hwnd, WM_CHAR, WPAram(path[i]), 1);

    end;

    //次数模拟选择文件,就是将文件的位置填写到选择框内。

  end;

  if (TName = ‘打开(&O)‘) or (TName =‘确定‘) then

  begin

    PostMessage(Hwnd, WM_LBUTTONDOWN, 0, 0);

    PostMessage(Hwnd, WM_LBUTTONup, 0, 0);

    //此处模拟点击

  end;

  Result := True;

end;

//...

Procedure FindWin();//调用

var Hwnd:THandle;

begin

 hwnd := FindWindow(nil, Title);

 //Title为文件选择窗口标题

 if Hwnd <> 0 then

 begin

   EnumChildWindows(Hwnd, @EnumProc, lp);

 end;

end;

3、需要注意事项:

上载文件表单对话框

a、选择文件对话框的窗口标题,在不同的IE内核下是不相同的,我在Win7及Xp上测试是两种分别为"选择文   件"、"选择要加载文件"。
b、在模拟填写的时候,需要注意,在提示打开文件的时候,代码的运行是暂停的,也就是说你必须在线程中进行模拟打开。

c、在文件名输入的时候,不要用SetWindowText函数,这个函数无法实现,只能采用发送WM_CHAR消息的方式,模拟字符输入。
4、最后告诫大家,如果没有特殊的加密算法,或者其它限制,尽量直接采用Http协议来提交表单,否则有一些东西太过于麻烦。

时间: 2024-12-26 14:31:52

WebBrowser自动填充打开文件对话框的相关文章

VS MFC CFileDialog类 打开文件对话框和另存为对话框

1 explicit CFileDialog( 2 BOOL bOpenFileDialog, 指定的参数创建哪种类型的对话框. 设置到构造 文件已打开 对话框的 TRUE. 设置到构造 保存文件 对话框的 FALSE. 3 LPCTSTR lpszDefExt = NULL, 默认的文件扩展名. 如果用户在文件名框中不包括包含在用户的计算机上的关联) 的已知扩展 (一,lpszDefExt 指定的扩展自动追加到文件名. 如果此参数是 NULL,扩展不是追加. 4 LPCTSTR lpszFil

如何找到文件的家-打开文件对话框openFileDialog

private void button1_Click(object sender, EventArgs e) { openFileDialog1.Filter = "*.txt|*.txt";//设置文件 DialogResult dr = openFileDialog1.ShowDialog();//显示打开文件对话框 if (dr ==DialogResult.OK) { richTextBox1.Text = System.IO.File.ReadAllText(openFile

QT 打开文件对话框总结

Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ",  tr("Allfile(*.*);;mp3file(*.mp3)")); 说明:这样就会产生一个对话框,和系统的资源管理器差不多的.返回的是你选择文件的 绝对路径. 参数1:父窗口 参数2:对话框的标题 参数3:默认的打开的位置,如"我的文档"等 参数4:文件的过滤器,注意文

MFC程序打开文件对话框出错的问题解决

前几天从网上下了个图像分析的mfc小程序,是VC6的 用VC6在本地编译生成都没问题,运行起来弹出一个未处理的错误,程序崩溃退出. 想起来原来遇到过打开文件对话框方面的问题,当时项目时间紧张未能深究. 这次要好好看下这个问题. 具体做法就是深入细致的跟踪.跟踪.跟踪... 应用代码,跟进 MFC的代码,跟进 Alt+8调出反汇编,跟进... 反复多次重复追踪.缩小目标,确定问题是:在CFileDialog 的析构函数中,调用了CString 的析构函数, 恰恰是析构CSring 出错了. CFi

vc 添加打开文件对话框并读取文件

转自:http://blog.csdn.net/halibobo520/article/details/3371944 1.创建打开文件对话框:                                   CFileDialog dlg(TRUE,//TRUE是创建打开文件对话框,FALSE则创建的是保存文件对话框                                  ".txt",//默认的打开文件的类型                              

java中文件保存、打开文件对话框

1 package com.soft.test; 2 3 //AWT: FileDialog类 + FilenameFilter类 可以实现本功能 4 //Swing: JFileChooser类 + FileFilter类 可以实现本功能 5 // 6 //该类用来测试打开文件和保存文件的对话框 7 8 import java.awt.*; //为了使用布局管理器 9 import java.awt.event.*;//用来处理事件 10 import javax.swing.*; //最新的

Qt打开文件对话框

项目中需要打开文件对话框,就查了一下,不得不说Qt的帮助文档做的真好,非常详细.要实现这个功能有两种方式,使用QFileDialog的静态方法,实例化QFileDialog对象. 基本算是照抄帮助文档了.下面是自己的代码. 1 // 单击文件按钮 2 void FirstDialog::on_pushButtonFile_clicked() 3 { 4 QString strFile = QFileDialog::getOpenFileName( 5 this, 6 tr("打开文件"

打开文件对话框和文件拖曳功能

打开文件对话框和文件拖曳功能 打开文件对话框 生成一个编辑框控件绑定变量m_szPath,一个按钮控件添加事件OnBnClickedButtonBrowse(). void CMFC06FileBrowseDlg::OnBnClickedButtonBrowse() { // TODO: 在此添加控件通知处理程序代码 // 过滤器 static TCHAR BASED_CODE szFilter[] = _T("JPG (*.jpg)|*.jpg|") _T("BMP文件 (

15.WinForm练习--打开文件对话框

namespace _15.打开文件对话框{public partial class Form1 : Form{public Form1(){InitializeComponent();} private void button1_Click(object sender, EventArgs e) { //点击弹出对话框,新建对话框对象 OpenFileDialog ofd = new OpenFileDialog(); //设置对话框标题 ofd.Title = "请选择要打开的文件"