#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, спасибо, что поделились решением, и вы также можете принять свой собственный ответ , если это решит вашу проблему.