2016-09-02 2 views
0

У меня есть приложение 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 
+0

Добавить кучу Снов Inbetween последовательностей и посмотреть, если он работает, как задумано. Если он мигает оранжевым, это означает, что программа была выполнена, но никогда не была активирована (я думаю.) Возможно, ваше приложение слишком быстро обрабатывает (пытается активировать новое окно, но оно еще не зарегистрировано) –

+0

Я дам этому и посмотреть, что произойдет –

+1

Должен 'WinWaitActive ($ hWnd, 5)' быть 'WinWaitActive ($ hWnd," ", 5)'? –

ответ

1

Попробуйте это:

; Test if the window exists and display the results. 
If WinExists($axTitle, "") Then 
    ; add here: check if the window is active - activate if not 
    If Not WinActive($axTitle) Then WinActivate($axTitle) 
Else 
    Run($exePath) 
    WinWait($axTitle, "", 20) 
EndIf 
+0

Хорошо, я вижу здесь логику, поэтому убедитесь, что окно активировано до получения дескриптора окна. –

+0

Ручка окна должна быть восстановлена ​​без активации окна ... –

Смежные вопросы