【问题标题】:AutoHotKey dynamic hotkeysAutoHotKey 动态热键
【发布时间】:2018-05-25 22:28:07
【问题描述】:

我尝试编写一个 ahk 脚本,它允许我将当前打开的窗口绑定到热键。 它的工作方式是,如果您按 ALTGR + , + 任何字符,则当前窗口的 ProcessPath 将被保存。

现在,使用 ALTGR + 选择的字符,如果它已经打开(激活),我要么切换到此窗口,要么为此进程运行 .exe 文件。

要删除热键,我使用 ALTGR + . + 相应的键。

所有热键都保存在 .ini 文件中,因此设置不会丢失。

一切正常.....但是 问题是:我必须为每个键复制代码(我编写了一个 python 脚本来为我复制它)。 有没有办法在ahk中设置动态热键?

这是我的代码:

iniFile := "winshortcut.ini"

运行某个进程或切换到已运行的窗口。该循环解决了可能发生的一些延迟问题。

RunOrActivate(key, Target)
{
    SplitPath, Target, TargetNameOnly, , TargetEXE
    Process, Exist, %TargetNameOnly%

    If (ErrorLevel > 0){
            WinActivate, ahk_pid %ErrorLevel%
    } else {
        if (Target != "ERROR") {
            Run, %Target%

            if (TargetEXE != "exe"){
                WinGetTitle, x, A
                if (x != TargetNameOnly){
                    Loop, 5 {
                        Sleep, 100
                        Run, %Target%
                    }
                }
            }
        } else {
            TrayTip AltGr+%key%, No binding, 2
        }
    }   
}

这一行从 ini 文件中读取密钥的路径。我必须为每个键复制它:

IniRead, PATH_w, %iniFile%, savedKeys, w
IniRead, PATH_r, %iniFile%, savedKeys, r
...

此块处理用于保存、删除或更改单个键 (w) 进程的热键。这是复制和更改了 23 次:

; ############## w ##############

<^>!w::
if (GetKeyState(",")){

    if (PATH_w != "ERROR") {
            SplitPath, PATH_w, TITLE_w_old
    }

    WinGet PATH_w, ProcessPath, A

    SplitPath, PATH_w, TITLE_w

    if (TITLE_w == "Explorer.EXE"){
        WinGetTitle, TITLE_w, A
    for w in ComObjCreate("Shell.Application").Windows
        if (TITLE_w = w.Document.Folder.Self.Name) {
            PATH_w := % w.Document.Folder.Self.Path
        }
    }

    IniWrite, %PATH_w%, %iniFile%, savedKeys, w

    if (TITLE_w_old) {
            if (TITLE_w_old != TITLE_w){
                    TrayTip Changing binding for AltGr+W, From %TITLE_w_old% to %TITLE_w%
            } else {
                    TrayTip Binding for AltGr+W, %TITLE_w%
            }
    } else{
            TrayTip New binding for AltGr+W, %TITLE_w%
    }
 } else if (GetKeyState(".")){
    PATH_w := "ERROR"
    TITLE_w_old := ""
    IniDelete, %iniFile%, savedKeys, w
    TrayTip AltGr+W, Binding deleted

} else {    
    RunOrActivate("W", PATH_w)

}
return

ahk 中有没有办法将热键打包到一个函数中?

这是整个事情,包括我包裹的python代码:

bitbucket.org: autohotkey-winshortcut

【问题讨论】:

标签: python dynamic autohotkey shortcut hotkeys


【解决方案1】:

AppFactory,它有一个内置的动态热键系统,完整的“按下键绑定”提示,选择野生,阻止等选项,并将所有内容保存到一个INI文件中

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 2012-10-02
    • 1970-01-01
    • 2015-10-10
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多