用于在 Windows 10 上激活 always-on-top 计算器的 AHK 脚本

AHK script to activate always-on-top Calculator on Windows 10

如何使用 AHK 激活处于 AlwaysOnTop 模式的 Windows10 计算器应用程序
如果您在计算器处于标准模式时单击 'Keep on top',它会变成这样

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

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

我尝试了 How to get window handle by PID in autohotkey?
中的提示 但是我没有得到有效的 class 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

修改您现有的脚本(您不需要通过获取 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

Window不是来自Calculator.exe,而是来自ApplicationFrameHost.exe
而且它不会是唯一来自该可执行文件的 window。所以我建议存储计算器 window 的 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

所以有两个热键解决方案,另一个热键只是额外的,甚至不需要它,除非您关闭并重新启动计算器并需要 re-get 它的 hwnd。
首先我们检查计算器是否存在,如果不存在,启动一个,等待它打开,存储它的 hwnd 和 return.
有用的文档链接:Last found window and WinExist().

如果确实存在计算器,请检查我们是否存储了 hwnd,或者我们是否使用过替代热键 Win+Alt+C.
如果您打开了一个计算器,但没有存储它的 hwnd,就会出现这种情况。您可以手动激活计算器 window 并存储它的 hwnd。
有用的文档链接:A_ThisHotkey and Regex match shorthand ~=(检查是否在 A_ThisHotkey 中找到 !)。

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