2016-02-23 48 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

那么,因为我没有任何机器上的管理员权限,以及我在其他机器上尝试脚本的用户,这只会是学术性的。但这对我来说是一个新想法。谢谢。 –