【问题标题】:AHK script to activate always-on-top Calculator on Windows 10在 Windows 10 上激活始终在线计算器的 AHK 脚本
【发布时间】:2020-11-06 23:35:16
【问题描述】:

如何使用 AHK 激活处于 AlwaysOnTop 模式的 Windows10 计算器应用程序
如果您在计算器处于标准模式时单击“保持顶部”,它会变成这样

请注意,它没有标题栏
我用来激活已经打开的计算器的 AHK 脚本不再工作

#c::
    if not WinExist("Calculator")
    {
        Run calc.exe
        WinWait Calculator
    }
    WinActivate Calculator

我尝试了来自How to get window handle by PID in autohotkey?的提示
但我没有得到有效的类 id,这是我的脚本,添加了一些调试:

#c::
    DetectHiddenWindows, on

    Process, Exist, Calculator.exe
    cpid := ErrorLevel    
    WinGetClass, ClassID, ahk_pid %cpid%
    WinGetTitle, Title, ahk_pid %cpid%
    exist := WinExist("ahk_exe Calculator.exe")
    active := WinActive("ahk_exe Calculator.exe")
    MsgBox look for [%cpid%] [%Title%] [%ClassID%] [%exist%] [%active%] ; cpid is the only valid variable

    if not WinExist("Calculator")
    {
        Run calc.exe
        WinWait Calculator
    }

    WinActivate Calculator

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    窗口不是来自Calculator.exe,而是来自ApplicationFrameHost.exe
    它不会是来自该可执行文件的唯一窗口。所以我建议存储计算器窗口的hwnd 然后使用它。

    #!c::
    #c::
        Process, Exist, % "Calculator.exe"  ;see if a calculator exists
        if (!ErrorLevel)                    ;ErrorLevel was set to 0 (false) if doesnt exist
        {
            Run, % "calc.exe"
            WinWait, % "Calculator"         ;make sure this is correct for your language
            hwnd := WinExist()              ;use last found window
            return
        }
        else if (!hwnd || A_ThisHotkey ~= "!") ;set or update hwnd      
            hwnd := WinActive("A")
        else
            WinActivate, % "ahk_id " hwnd
    return
    

    所以两个热键解决方案,另一个热键只是额外的,除非你关闭并重新启动计算器并需要重新获取它的 hwnd,否则甚至不需要它。
    首先我们检查是否存在计算器,如果不存在,启动一个,等待它打开,存储它的 hwnd 并返回。
    有用的文档链接:Last found windowWinExist()

    如果确实存在计算器,请检查我们是否存储了 hwnd,或者我们是否使用了替代热键 Win+Alt+C
    如果您打开了一个计算器,但没有存储它的 hwnd,就会出现这种情况。您可以手动激活计算器窗口并存储其 hwnd。
    有用的文档链接:A_ThisHotkey 和正则表达式匹配简写 ~=(检查 ! 是否在 A_ThisHotkey 中找到)。

    最后,如果没有什么特别需要做的,只要使用基本的 Win+C 热键,只需激活计算器即可。

    【讨论】:

    • 它有效,谢谢。我很想知道为什么WinGetahk_idahk_exe 会失败。我什至尝试遍历所有窗口:WinGet, id, List,,,Program Manager Loop, %id% ...
    【解决方案2】:

    修改您现有的脚本(您不需要通过获取 PID 和 ahk_class 来使其过于复杂)

    
    #c::
        BlockInput, On
        DetectHiddenWindows, on
    
        if not WinExist("Calculator")
        {
            Run calc.exe
            WinWait Calculator
            
        }
    
        WinActivate Calculator
        Winset, Alwaysontop, , A
        BlockInput, Off
        return
    

    【讨论】:

    • 我认为问题主要在于如果他使用从this 按钮启动的紧凑型计算器顶部版本,则此检查WinExist("Calculator") 将不起作用。此脚本中仍然存在此问题。
    • Interesting... Window Spy 告诉我顶部版本确实有一个“计算器”的窗口标题,但您的声明是正确的,WinExist("Calculator") 不能正常工作.. .@0x464e
    猜你喜欢
    • 2020-08-12
    • 2019-04-17
    • 1970-01-01
    • 2019-01-13
    • 2018-06-20
    • 2020-11-09
    • 2020-11-19
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多