Vb.net 向Internet Explorer浏览器iFrame元素发送消息{ENTER}

Vb.net 向Internet Explorer浏览器iFrame元素发送消息{ENTER},vb.net,internet-explorer,winapi,iframe,sendmessage,Vb.net,Internet Explorer,Winapi,Iframe,Sendmessage,我有一个小项目需要我自动化IE。 我在最初的移动中使用了SHDocVw.InternetExplorer类。(附在IE上) 但在那之后,我想使用WindowsAPI来获得浏览器元素的焦点并单击它 我知道,使用内置的SHDocVw.InternetExplorer功能,或者使用第三方类,如Watin 但是这次我想使用WindowsAPI 当我打开IE浏览器并找到一些要单击的链接/元素时,这就完美了 我使用按键{TAB}遍历HTML元素,然后读取IE状态栏以获取其链接。然后我使用按键{ENTER}单

我有一个小项目需要我自动化IE。 我在最初的移动中使用了
SHDocVw.InternetExplorer
类。(附在IE上)

但在那之后,我想使用WindowsAPI来获得浏览器元素的焦点并单击它

我知道,使用内置的
SHDocVw.InternetExplorer
功能,或者使用第三方类,如Watin

但是这次我想使用WindowsAPI

当我打开IE浏览器并找到一些要单击的链接/元素时,这就完美了

我使用按键{TAB}遍历HTML元素,然后读取IE状态栏以获取其链接。然后我使用按键
{ENTER}
单击/执行它

当{TAB}选择的元素在iFrame中时,我遇到了问题,按键{ENTER}不起作用

这是我的示例代码

导入WindowsApplication1.win\u Api
模块浏览器
公共类
作为SHDocVw.InternetExplorer的私有共享IE
子新建(可选ByVal url为String=“about:blank”)
Dim bw作为新的SHDocVw.InternetExplorer
IE=bw
尝试
IE.Navigate(url)
特例
结束尝试
端接头
共享子单击(byval url作为字符串)
尺寸Z为整数=0
当Z=0时执行此操作
停止
'发送keboard按TAB此API工作正常
SendMessage(即HWND、WM_IME_KEYDOWN、Keys.Tab、0)
停止
如果IE.StatusText=url,则
Z=1
如果结束
环
对于GetChildWindows(IE.HWND)中的每个I As IntPtr
Dim L为整数=256
将sb调整为新系统.Text.StringBuilder(L)
GetClassName(I、sb、L)
如果sb.ToString=“Internet Explorer\u服务器”,则
'发送键盘按ENTER键,此项工作
'但如果选项卡操作选择的元素位于iframe上,则不起作用
SendMessage(I,WM_CHAR,Keys.Enter,0)
如果结束
下一个
端接头
末级
端模块

使用
ShDocVw
界面,您已经有了URL,只需调用
导航
。读取状态栏并不是那么稳定。如果用户在一个小窗口中浏览,并且URL被截断,该怎么办?发送虚拟按键也有问题。如果用户自己按tab键怎么办?SendMessage(WM_CHAR)。改用。我可以用
Navigate
方法获得它,但我需要用api来完成这项工作(我认为
Navigate
方法是dom方法的一部分,我用它来打开主页)
SendInput
工作,但需要我专注于IE。
SendMessage
仅对非iframe元素工作。:/。我试图使项目自动化IE,使用更少的DOM。使用
ShDocVw
界面,您已经有了URL,只需调用
Navigate
。读取状态栏并不是那么稳定。如果用户在一个小窗口中浏览,并且URL被截断,该怎么办?发送虚拟按键也有问题。如果用户自己按tab键怎么办?SendMessage(WM_CHAR)。改用。我可以用
Navigate
方法获得它,但我需要用api来完成这项工作(我认为
Navigate
方法是dom方法的一部分,我用它来打开主页)
SendInput
工作,但需要我专注于IE。
SendMessage
仅对非iframe元素工作。:/。我试着用更少的DOM使IE自动化。