Нажатие кнопки во внешнем диалоге (используя SendMessage?) - PullRequest
0 голосов
/ 03 ноября 2010

Основы: У меня есть приложение Windows .NET Form со встроенным элементом управления WebBrowser. Это вызывает загрузку, которая открывает диалоговое окно «Сохранить загрузку». Я хотел бы автоматически нажать кнопку «Сохранить».

Я нашел этот другой вопрос StackOverflow: Нажмите кнопку сохранения в "диалоге загрузки файлов" в Internet Explorer через 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 слишком быстро? Слишком медленно? Должен ли я использовать SendMessage с BM_CLICK и т. Д. Или какие-либо другие действия? Я чувствую, что я нахожусь на 90% пути ... любая помощь будет оценена.

1 Ответ

0 голосов
/ 03 ноября 2010

Сообщение 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)

Обратите внимание на изменение dialogButtonHandle для сообщения BM_CLICK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...