用于在 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热键,只需激活计算器即可。
如何使用 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热键,只需激活计算器即可。