2016-02-23 49 views
1

有一個問題我無法自己解決。無法對焦窗口

我寫這個劇本的部分:

If WinExists("Application") then 
     WinActivate("Application") 
       ... 
       ... 
Else 
     MsMsgBox($MB_OK,"Attention", "openSiebelOrderScreen: Application not found!") 
     _endAutoIT() // ends the script at all 
EndIf 

這非常適用於所有Windows 8的計算機只有一個除外。有一臺筆記本電腦系統,也運行Windows 8,但我無法說服這臺電腦在給定的腳本部分前面獲得應用程序窗口。我已經設置了Opt("WinTitleMatchMode", 2)

有人有同樣的問題,或者可能是一個解決方案嗎?

+2

您是否看過WinExsts等的返回碼? – Xenobiologist

+0

那麼,WinExists不會引發錯誤。我試圖獲得WinGetState的窗口狀態。在麻煩的筆記本電腦上,結果是數字「16」,因此AutoIT會檢測到應用程序窗口在那裏,但被最小化。我會盡力使應用程序窗口最大化。希望它會成爲焦點。 –

+0

好吧,我現在解決了它,因爲我發現,應用程序Windows被AutoIt檢測爲最小化,但我需要區分WinActivate和WinSetState。這也令我困惑。但現在:「WinActivate( 「申請」) \t \t睡眠(500) \t \t本地$窗口句柄= WinWait( 「應用程序」, 「」,10) \t \t如果BITAND(WinGetState($窗口句柄),16) = 16然後 \t \t \t WinSetState($窗口句柄 「」,@SW_MAXIMIZE) \t \t ENDIF」 –

回答

0

建議在操作窗口時設置它們。

#RequireAdmin ;Will give your script a permission elevation (sometimes its needed) 
Opt("WinTitleMatchMode", 4) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase 
Opt("WinSearchChildren", 1) ;0=no, 1=search children also 
0

嘗試提升腳本。以管理員身份運行它,使用您在其他計算機上使用的相同代碼。 筆記本電腦的用戶可能不是管理員,當您運行該腳本時,它不具有管理員權限。

請記住;要使腳本能夠與應用程序交互,它必須位於應用程序的相同或更高級別。

#RequireAdmin 

在這種情況下就好了。

+0

那麼,因爲我沒有任何機器上的管理員權限,以及我在其他機器上嘗試腳本的用戶,這隻會是學術性的。但這對我來說是一個新想法。謝謝。 –