问题描述
如何使用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
解决方法
该窗口不是来自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 window和WinExist()。
如果确实存在计算器,请检查是否存储了hwnd,或者是否曾经使用过替代热键 Win + Alt + C 。
如果您有一个打开的计算器,但是没有存储它的hwnd,则这样。您可以手动激活计算器窗口并存储其hwnd。
有用的文档链接:A_ThisHotkey和Regex匹配速记~=(检查是否在!
中找到A_ThisHotkey
)。
最后,如果不需要做任何特别的事情,仅使用基本的 Win + C 热键,只需激活计算器即可。
,修改现有脚本(获取PID和ahk_class btw无需使其过于复杂)
#c::
BlockInput,On
DetectHiddenWindows,on
if not WinExist("Calculator")
{
Run calc.exe
WinWait Calculator
}
WinActivate Calculator
Winset,Alwaysontop,A
BlockInput,Off
return