.net 单击外部对话框上的按钮(使用SendMessage?)

.net 单击外部对话框上的按钮(使用SendMessage?),.net,winforms,pinvoke,.net,Winforms,Pinvoke,基础:我有一个带有嵌入式WebBrowser控件的Windows.NET表单应用程序。它触发下载,打开“保存下载”对话框。我想自动点击“保存”按钮 我发现了另一个问题:但它没有真正的答案 到目前为止,我的代码在部署到实际工作站时无法可靠地工作。在调试/从VisualStudio运行时,它工作正常。在实际的工作站上,有时“保存”按钮会像单击一样“高亮显示”或“按下”,但实际上什么也没有发生 代码如下: Dim dialogHandle = FindWindowEx(IntPtr.Zero, Int

基础:我有一个带有嵌入式WebBrowser控件的Windows.NET表单应用程序。它触发下载,打开“保存下载”对话框。我想自动点击“保存”按钮

我发现了另一个问题:但它没有真正的答案

到目前为止,我的代码在部署到实际工作站时无法可靠地工作。在调试/从VisualStudio运行时,它工作正常。在实际的工作站上,有时“保存”按钮会像单击一样“高亮显示”或“按下”,但实际上什么也没有发生

代码如下:

Dim dialogHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "#32770", "File Download")
Dim buttonTitle = "&Save"
Dim dialogButtonHandle = FindWindowEx(dialogHandle, IntPtr.Zero, "Button", buttonTitle)

SendMessage(dialogButtonHandle, BM_SETSTATE, 0, 0)
SendMessage(dialogButton, BM_CLICK, 1, 0)
SendMessage(dialogButtonHandle, BM_SETSTATE, 1, 0)

我不知道这是否是在其他窗口中单击按钮的完全100%正确的方式,但它似乎有些工作。也许我在发送SendMessage太快了?太慢了?我应该使用带有BM_单击等的SendMessage还是其他操作?我觉得我已经完成了90%的任务。。任何帮助都将不胜感激。

BM_SETSTATE消息只是让按钮看起来像被按下了或没有按下,我猜您并不特别关心这一点,只是希望按下按钮的实际操作发生

试着改变

SendMessage(dialogButtonHandle, BM_SETSTATE, 0, 0)
SendMessage(dialogButton, BM_CLICK, 1, 0)
SendMessage(dialogButtonHandle, BM_SETSTATE, 1, 0)
公正

SendMessage(dialogButtonHandle, BM_CLICK, 1, 0)

请注意BM_CLICK消息对话框ButtonHandle的更改。

您是否尝试添加线程。Sleep(100)在正确的位置暂停?有时它可能在错误的时间发送事件。。。只是一个想法。是的,我已经试过了,但不幸的是,由于WebBrowser控件在同一个线程下运行,它冻结了IE(对话框和所有的),就我所知。我还尝试了“假睡眠”(在调用Application.DoEvents()的循环中等待xxx毫秒),但没有效果。我在文档中没有看到任何地方说我无论如何都需要等待..锁定这个;删除/取消删除的周期导致问题