У меня есть приложение AutoIt, которое активирует приложение Dynamics AX на основе переданных параметров.AutoIt - Приложение Windows иногда вспыхивает, а не становится активным
У меня есть различные приложения AX, открытые и сведенные к минимуму. В большинстве случаев правильное приложение (на основе параметра $ partition) активируется и находится в фокусе, а сценарий перемещается через приложение. Иногда (возможно, 1 из 3) приложение просто мигает на панели задач и не активируется, и сценарий не может продолжаться.
Я запускаю приложение AutoIt из приложения .Net, которое вызывает приложение и передает параметры на сервере Windows 2012 Server.
#include <MsgBoxConstants.au3>
#include <GuiListView.au3>
Local $partition = $CmdLine[1]
local $axc = $CmdLine[2]
Local $brand = $CmdLine[3]
Local $sTerm = $CmdLine[4]
;command line example
;GoToCustomerServicePage.exe "msl" "MSLtd" "MSUK" "LS14 6PN"
SearchForCust($partition, $axc, $brand, $sTerm)
Func SearchForCust($partition, $axc, $brand, $sTerm)
;Set the Title match mode
Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
local $custSer = StringUpper($partition) & "/Omnica MCR/Common/Customer Service"
local $exePath = "C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin\Ax32.exe \\zoom-sql2\axcshare\" & $axc & ".axc"
local $axTitle = "[TITLE:" & $partition & "; CLASS:AxMainFrame]"
; Wait 10 seconds for the window to appear.
WinWait($axTitle, "", 10)
; Test if the window exists and display the results.
If WinExists($axTitle, "") Then
Else
Run($exePath)
WinWait($axTitle, "", 20)
EndIf
local $hWnd = WinGetHandle($axTitle)
WinActivate($hWnd)
If WinActive($hWnd) Then
Else
WinWaitActive($hWnd, 5)
EndIf
; Simulate clicking on the address bar
Send("{F11}")
;Enter this into the address bar
Send($custSer)
Send("{ENTER}")
;Set the Brand
Send($brand)
Send("{ENTER}")
;send search term
If $sTerm <> "unavailable" THEN
Send($sTerm)
Send("{ENTER}")
EndIf
EndFunc
Добавить кучу Снов Inbetween последовательностей и посмотреть, если он работает, как задумано. Если он мигает оранжевым, это означает, что программа была выполнена, но никогда не была активирована (я думаю.) Возможно, ваше приложение слишком быстро обрабатывает (пытается активировать новое окно, но оно еще не зарегистрировано) –
Я дам этому и посмотреть, что произойдет –
Должен 'WinWaitActive ($ hWnd, 5)' быть 'WinWaitActive ($ hWnd," ", 5)'? –