我想要实现的是:

我想要实现的是:

我想要实现的是:

SetTitleMatchMode, 2
#ifwinactive ahk_class BCGPMiniFrame: ahk_exe FOXITPDFEDITOR.EXE 

ahk_class BCGPMiniFrame:部分只是 的部分匹配ahk_class BCGPMiniFrame:3c0000:8:10007:10。但这#ifwinactive不起作用。有什么想法吗?

以下是完整背景:

我想为 Foxit 阅读器浮动面板创建一个热键。

#ifwinactive ahk_class BCGPMiniFrame:3c0000:8:10007:10 ahk_exe FOXITPDFEDITOR.EXE 

问题是ahk_class每个新实例的部分都会发生变化。因此,我想像这样同时指定部分ahk_class和全部。ahk_exe

SetTitleMatchMode, 2
#ifwinactive ahk_class BCGPMiniFrame: ahk_exe FOXITPDFEDITOR.EXE 

但那不管用。后来我了解到SetTitleMatchMode, RegEx如何修复部分ahk_class匹配的问题。

SetTitleMatchMode, RegEx
#ifwinactive ahk_class BCGPMiniFrame: ahk_exe FOXITPDFEDITOR.EXE 

但这也不起作用。我该如何实现呢?

编辑

根据user3419297的建议,我尝试了这个但失败了。

SetTitleMatchMode, RegEx
GroupAdd, Foxit_reader_floating_panel_group, ahk_class BCGPMiniFrame
SetTitleMatchMode, 2  ; for the rest

我也尝试为 msedge.exe 创建另一个 ahk_group,但也失败了。

SetTitleMatchMode, RegEx
GroupAdd, chrome, ahk_class Chrome_
SetTitleMatchMode, 2  ; for the rest

然后我尝试了另一个版本并且成功了。

SetTitleMatchMode, RegEx
GroupAdd, Foxit_reader_floating_panel_group, ahk_class BCGPMiniFrame:bd0000:8:10007:10
SetTitleMatchMode, 2  ; for the rest

答案1

尝试这个:

; auto-execute section (top of the script):


; If the script is not elevated, relaunch as administrator and kill current instance:

full_command_line := DllCall("GetCommandLine", "str")

if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
    try ; leads to having the script re-launching itself as administrator
    {
        if A_IsCompiled
            Run *RunAs "%A_ScriptFullPath%" /restart
        else
            Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
    }
    ExitApp
}

SetTitleMatchMode RegEx
GroupAdd, Foxit_reader_floating_panel_group, ahk_class BCGPMiniFrame:

SetTitleMatchMode 2  ; for the rest
; ...

        RETURN   ; === end of auto-execute section ===
        
; ...

#IfWinActive ahk_group Foxit_reader_floating_panel_group

    F1:: MsgBox, Foxit reader floating panel is active

#IfWinActive

设置标题匹配模式无法在自动执行部分、热键/热键定义或函数之外工作,因为它是命令,而不是指令#IfWinActive

编辑

如果你想在脚本中使用 RegEx 作为标准 SetTitleMatchMode(这种情况很少见),那么你不需要在自动执行部分创建组并直接使用#IfWinActive ahk_class BCGPMiniFrame:

但是如果您想在热键/热键/功能中使用另一个 SetTitleMatchMode,例如 SetTitleMatchMode 2(通常如此),那么您必须每次在其定义中添加它。

编辑2

如果程序以管理员权限运行,则 AHK 将不会拦截按键。尝试以管理员身份运行脚本,就像在编辑的代码中一样。

更多详细信息请阅读https://autohotkey.com/docs/commands/Run.htm#RunAs

编辑3

另一种方法:

; auto-execute section (top of the script):

SetTimer, create_group, 200 
; ...

        RETURN   ; === end of auto-execute section ===
        
; ...

create_group: 
    WinGetClass, ActiveClass, A
    If InStr(ActiveClass, "BCGPMiniFrame")
    {
        WinGet, active_id, ID, A
        GroupAdd, Foxit_reader_floating_panel_group, ahk_id %active_id%
    }
    If InStr(ActiveClass, "Notepad") ; Notepad, Notepad2, Notepad3, Notepad++
    {
        WinGet, active_id, ID, A
        GroupAdd, Notepad_group, ahk_id %active_id%
    }
    ; ...
return

#IfWinActive ahk_group Foxit_reader_floating_panel_group

    F1:: MsgBox, Foxit reader floating panel is active
    
#IfWinActive ahk_group Notepad_group

    F1:: MsgBox, Notepad_group is active

#IfWinActive

相关内容