Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过VBA中的句柄将对象延迟绑定到现有实例_Vba_Internet Explorer_Modal Dialog_Late Binding - Fatal编程技术网

通过VBA中的句柄将对象延迟绑定到现有实例

通过VBA中的句柄将对象延迟绑定到现有实例,vba,internet-explorer,modal-dialog,late-binding,Vba,Internet Explorer,Modal Dialog,Late Binding,此问题与VBA Internet Explorer自动化有关 我拥有的是一个Internet Explorer窗口,当页面加载时,它会加载一个带有按钮的对话框 以下是赠品: 该对话框属于“Internet Explorer\u TridentDlgFrame”类 它不像最初的IE窗口那样被视为应用程序窗口 它的“表单”和“按钮”ID是可获得的,但不在原始IE文档的DOM中 因此,引用所述ID与之交互不起作用 类似地,将JavaScript附加到按钮上也不起作用 无法通过关闭对话框来绕过它。必须按

此问题与VBA Internet Explorer自动化有关

我拥有的是一个Internet Explorer窗口,当页面加载时,它会加载一个带有按钮的对话框

以下是赠品:

  • 该对话框属于“Internet Explorer\u TridentDlgFrame”
  • 它不像最初的IE窗口那样被视为应用程序窗口
  • 它的“表单”和“按钮”ID是可获得的,但不在原始IE文档的DOM中
  • 因此,引用所述ID与之交互不起作用
  • 类似地,将JavaScript附加到按钮上也不起作用
  • 无法通过关闭对话框来绕过它。必须按下“继续”按钮
  • 所以我想我应该使用另一种方法:

    如果我在所有窗口中循环,我可以通过窗口标题获得对话框的窗口句柄

    那么,有没有办法通过句柄将“对象a”延迟绑定到对话框窗口?

    如果是这样,是否可以将“对象B”延迟绑定到“对象A”文档/表单以与之交互?

    这就像访问打开的Excel工作簿的现有实例,并延迟将对象绑定到该实例,以便与工作簿本身交互

    注意:我过去使用过Selenium,虽然它可能是绕过此对话框的更好解决方案,但将我(已经)编写的其余程序翻译成Java将是一场噩梦

    注2:使用winHttp或其他“无头”方法不是选项


    非常感谢您的帮助!谢谢!

    *仅当窗口支持时,才通过句柄*将“对象A”后期绑定到对话框窗口。据我所知,只有Richedit窗口支持它。Explorer的ShellWindows找到它了吗。
    Set objShell=CreateObject(“Shell.Application”)
    为所有窗口中的每个窗口设置AllWindows=objShell.Windows
    msgbox window.locationname
    next
    。这是我尝试的第一个方法。但是我找到了一个确实定位对话框弹出窗口的示例:。但我仍然坚持使用这个示例延迟绑定代码的方式,即与后期绑定甚至COM无关。这是Windows上Windows的Windows API接口。它还使用一种旧的非推荐方式来查找只查找第一个窗口的窗口(即
    findwindoww()
    ,而不是
    EnumWindows
    )。如果您的按钮是按钮窗口(
    FindWindowsEx()
    将找到它们)然后,您可以使用
    SendMessage()通过Windows消息向他们发送单击消息
    API调用。我在另一个程序中嵌入了一些示例代码,该程序列出了系统上的所有窗口。它给出的输出如下
    Order Level WindowText ClassName HWnd ParentHWnd ProcessID ParentProcessID ThreadID ModuleNameHWin EXENameProcess
    198 0最新的“批处理文件或vbscript或cmd”问题-堆栈溢出-Internet Explorer选项卡ThumbNailWindow 6292800 6423328 5432 6488 6820«不可用错误=126»iexplore.exe
    您有使用findwindowsEx()单击按钮