VBA зависает, когда другое приложение открывает диалоговое окно

#vba #api #winapi

#vba #API #по WinAPI #winapi

Вопрос:

Я использую функцию API SendMessage, чтобы нажать кнопку в пользовательской форме в другом приложении, которое открывает диалоговое окно. Vba останавливается на SendMessage и не будет выполняться дальше, пока это диалоговое окно не будет закрыто.Я хочу, чтобы vba запускался, поскольку он должен заполнить текстовое поле во вновь открывшемся диалоговом окне. Любая помощь приветствуется.

 sub api_click_button()
a = FindWindow(vbNullString, "Exenta Solution")
b = FindWindowEx(a, 0amp;, "WindowsForms10.MDICLIENT.app.0.141b42a_r6_ad1", vbNullString)
c = FindWindowEx(b, 0amp;, "WindowsForms10.Window.8.app.0.141b42a_r6_ad1", "Inventory")
d = FindWindowEx(c, 0amp;, "WindowsForms10.BUTTON.app.0.141b42a_r6_ad1", vbNullString)
Dim xcoord As Long, ycoord As Long, opn_file As Long, winrect As RECT, retval As Long

retval = GetWindowRect(d, winrect)
xcoord = (winrect.Right - winrect.Left) / 2
ycoord = (winrect.Bottom - winrect.Top) / 2
opn = (ycoord * amp;H10000)   xcoord
retval = SendMessage(d, WM_LBUTTONDOWN, ByVal CLng(MK_LBUTTON), ByVal opn) ===>stops here 
retval = SendMessage(d, WM_LBUTTONUP, ByVal CLng(MK_LBUTTON), ByVal opn)

End Sub
  

Комментарии:

1. Это совершенно нормально. Входные события публикуются , а не отправляются, поэтому вместо этого вам нужно использовать postMessage().

2. Спасибо за предложение, я изучаю функцию postmessage, если бы вы могли привести мне пример с использованием моего кода, это помогло бы мне. Еще раз спасибо.

3. Вы не можете имитировать ввод с клавиатуры с помощью postMessage . Те же принципы применимы и к вводу с помощью мыши. Если вам нужно автоматизировать пользовательский интерфейс, используйте UI Automation .

Ответ №1:

Видео по ссылке помогло мне заставить его работатьhttps://www.youtube.com/watch?v=G-2khNFYQl8

Я создал файл сценария vbs с функцией sleep, которая заполняет диалоговое окно и закрывает его. Я выполнил файл сценария перед отправкой сообщения.

Комментарии:

1. Привет @Srini, спасибо, что поделились решением, и вы также можете принять свой собственный ответ , если это решит вашу проблему.