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

时间:2010-11-03 00:11:20

标签: .net winforms pinvoke

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

我发现了其他StackOverflow问题:Press save button of "File download dialog" of internet explorer via c#但它没有真正的答案。

到目前为止,我所拥有的代码在部署到实际工作站时无法可靠地工作。在调试/ Visual Studio中运行它,它工作正常。在实际的工作站上,有时候“保存”按钮会“点亮”或按下它,就像它被点击一样,但实际上并没有发生任何事情。

这是代码:

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_CLICK等的SendMessage还是其他一些操作?我觉得我90%都在那里......任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

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消息的dialogBu​​ttonHandle的更改。