如何在Autohotkey中使用“ Loop,Parse”来切换热键字符串?

时间:2019-01-11 07:55:30

标签: loops parsing autohotkey

我使用屏幕键盘输入数学笔记。我将其某些按钮定义为热键组合,有效地创建了这样的触摸屏宏:

^!2::send tan
^!3::send cos
^!4::send, sin 
^!5::send csc
^!6::send sec
^!0::send cot

我需要(仅当)单击鼠标左键时将这些热键切换为ON,以确保发送了触摸屏键盘上的正确宏(并且我的键盘上的普通键在任何其他时间都处于活动状态)。 )

以下代码有效,除了一个宏可以切换我使用的设备管理软件(DevManView)。仅当脚本未挂起时,该软件切换功能才能可靠地工作。

Suspend, on
~LButton::suspend, off
~lbutton up::
sleep, 50
suspend, on
return

所以我正在寻找另一种在不暂停整个脚本的情况下切换这些宏的方法。它还会教我关于循环解析的一两件事。

keys:="^!,¢^!\¢^!1¢^!8¢^!`¢^!2¢^!3¢^!4¢^!5¢^!6¢^!0¢^!.¢@¢^@¢^#¢^$¢^+5¢^^¢^*¢^`"
Loop,Parse,keys, ¢ ;create the hotkeys
            Hotkey,$%A_loopField%,MEOK_MACROS
Loop,Parse,keys ;turn them off
        Hotkey,$%A_loopField%,Off
~LButton::
sleep, 50
    Loop,Parse,keys ;toggle hotkeys
            Hotkey,$%A_loopField%,Toggle
return
MEOK_MACROS:
    Send % InStr(keys,SubStr(A_ThisHotkey,0))
return

我想将我创建的所有control + alt +(key)和control +(key)宏放入一个字符串中,然后使用〜LButton启用和禁用它们。您能指出我在哪里出问题了吗?

2 个答案:

答案 0 :(得分:0)

您似乎对循环有很好的了解。我发现的唯一错误是在第二个和第三个循环中指定了分隔符。见下文:

keys:="^!,¢^!\¢^!1¢^!8¢^!`¢^!2¢^!3¢^!4¢^!5¢^!6¢^!0¢^!.¢@¢^@¢^#¢^$¢^+5¢^^¢^*¢^`"
Loop,Parse,keys, ¢ ;create the hotkeys
        Hotkey,$%A_loopField%,MEOK_MACROS
Loop,Parse,keys, ¢ ;turn them off ***MISSING DELIMITER
        Hotkey,$%A_loopField%,Off
~LButton::
sleep, 50
    Loop,Parse,keys, ¢ ;toggle hotkeys  ***MISSING DELIMITER
            Hotkey,$%A_loopField%,Toggle
return
MEOK_MACROS:
    Send % InStr(keys,SubStr(A_ThisHotkey,0))
return

答案 1 :(得分:0)

您可以将鼠标单击用作热键的一部分,然后您无需打开或关闭任何东西。

~LButton & c::
    Run Notepad
    Return

或来自您的示例

~LButton & 2::send tan

~ 将使鼠标左键正常工作,只有在按下时才触发热键,同时按下第二个按钮。