【问题标题】:Unable to focus window无法聚焦窗口
【发布时间】:2016-02-25 04:57:19
【问题描述】:

有一个问题我自己解决不了。

我已经写了这个脚本部分:

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)

有人遇到同样的问题,或者可能有解决方案吗?

【问题讨论】:

  • 你看过WinExsts之类的返回码吗?
  • 好吧,WinExists 不会引发错误。我试图用 WinGetState 获取窗口状态。在麻烦的笔记本电脑上,结果是数字“16”,因此 AutoIT 检测到应用程序窗口存在,但已最小化。我将尝试强制最大化应用程序窗口。希望届时它会成为焦点。
  • 好的,我现在解决了这个问题,因为我发现应用程序 Windows 被 AutoIt 检测为最小化,但我需要区分 WinActivate 和 WinSetState。这也让我很困惑。但现在: 'WinActivate("Application") Sleep (500) Local $WinHandle = WinWait("Application","",10) If BitAND(WinGetState($WinHandle),16) = 16 Then WinSetState($WinHandle, " ", @SW_MAXIMIZE) EndIf'
  • 不错。展示你的代码,也许还有改进的余地。
  • 同时,我在这里找到了其他笔记本电脑,可以解决这个问题。但也有一些笔记本电脑可以在不应用此解决方法的情况下工作。除了其他硬件,一切都是一样的。很奇怪。

标签: windows-8 autoit


【解决方案1】:

建议在操作窗口时设置这些。

#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

【讨论】:

    【解决方案2】:

    尝试提升您的脚本。以管理员身份运行它,使用与它工作的另一台计算机上相同的代码。 可能笔记本电脑的用户不是管理员,并且当您运行脚本时它没有管理员权限。

    记住;要使脚本能够与应用程序交互,它必须与应用程序处于相同或更高级别。

    #RequireAdmin
    

    在这种情况下会很好。

    【讨论】:

    • 好吧,因为我在两台机器上都没有管理员权限,以及我在其他机器上尝试脚本的用户,这只是学术性的。但这对我来说是一个新的想法。谢谢。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多