Доступ к дескриптору диалогового окна и автоматическое управление пользовательским интерфейсом - PullRequest
0 голосов
/ 17 июля 2009

У меня есть некоторый VB-код, который использует COM-API и приводит к появлению определенного диалогового окна на экране. Моя программа является консольным приложением, которое нужно запускать в командном файле, но я не нашел другого способа сделать что-либо, кроме способа автоматического управления диалоговым окном.

Вот вызов API (без кода настройки), который приводит к появлению диалогового окна:

  Dim oScript = New ProvideX.Script()

  ' Setup code here '

  oScript.Run(commName)

Этот метод не имеет возвращаемого значения и дополнительных параметров, которые позволили бы мне заполнить нужные мне значения через API.

Я нашел один метод, чтобы получить дескриптор диалогового окна, но я не уверен, будет ли он работать или вместо этого попадет в окно командной строки.

Dim windowHandle = Process.GetCurrentProcess().MainWindowHandle

Есть ли способ получить список окон, которые были созданы моим процессом, чтобы я мог определить, какое окно соответствует моему диалогу?

Кроме того, кто-нибудь может указать мне правильное направление, как отправлять щелчки мыши и нажатия клавиш в неуправляемое диалоговое окно, или есть какой-то лучший способ сделать то, что мне нужно.

Это довольно простое диалоговое окно с предупреждением, которое необходимо принять, нажав кнопку ОК. Тогда есть два текстовых поля, которые должны быть заполнены данными, которые у меня есть. И тогда мне нужно нажать на другую кнопку.

Я не прошу полного ответа, я просто ищу общий способ, как это сделать.

Редактировать: Я проводил исследования на PINVOKE.net и думаю, что SendInput сработает, если я смогу получить правильную ручку. Я прошел через диалоговое окно, и все это может быть обработано с клавиатуры.

Ответы [ 2 ]

1 голос
/ 17 июля 2009

Чтобы получить HWND диалогового окна, я бы вызвал FindWindow () . Вы можете передать ему имя класса и заголовок вашего диалога, и он должен вернуть вам HWND. Вы можете использовать такой инструмент, как Spy ++ (установлен Visual Studio, по крайней мере, Professional Edition) или WinCheat , чтобы найти это для своего диалога.

Оттуда, если вы хотите получить HWND для кнопки ОК, попробуйте вызвать либо GetDlgItem () (передав ему HWND вашего диалога и его ID (Spy ++ может получить это для вас, я не уверен, может ли WinCheat или нет). Если это не сработает, вы всегда можете попробовать позвонить EnumChildWindows () и посмотреть, сможете ли вы найти его таким образом.

Я не эксперт по VB, и вызов некоторых из этих функций из VB может быть трудным и / или не работать (особенно EnumChildWindows(), поскольку для этого требуется функция обратного вызова). Но, надеюсь, это даст вам возможность начать поиск.

0 голосов
/ 18 июля 2009

IIRC Я использую EnumChildWindows () в StaxRip, вы можете найти код VB.NET в http://www.stax76.bplaced.net или, когда вы найдете код C #, вы можете перевести его в VB.NET с помощью Reflector, SharpDevelop или SharpDevelop сервис онлайн-конвертации.

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