关于 Autohotkey 高级用法的几个问题

关于 Autohotkey 高级用法的几个问题

我一直在使用这款出色的软件已经有一段时间了,但只是一些基本的事情。所以我想知道以下是否可行:

  • 对不同的应用程序使用不同的快捷方式 - 因此一个快捷方式在不同的地方执行不同的操作。

  • 为应用程序创建某种模式,你可以使用一些开关(vim 风格),这将改变快捷键要做的事情

  • 如果可以添加一些标题来表明你正在使用哪种模式 - 比上一项稍有改进

我感谢大家的回答。

答案1

第 1 点似乎已解决。至于第 2 点和第 3 点,您可以按照以下方法操作;我的代码可能效率不高,但确实有效:

#Persistent                   ;--This needs to come before any
SetTimer, IsActiveTimer, 20   ;--return in the script.

IsActiveTimer:  ;--Below comes what the timer does
if StateIsActive = 1
{
  MouseGetPos, Px, Py   ;--The below creates tooltip when active
  ToolTip, "State is: Active", Px+40, Py+50, 5
}
else
{
ToolTip,,,, 5  ;--Removes tooltip when not active
   }
return

!^#z::   ;--This is the hotkey that toggles the state
         ;--between active and not active.
If StateIsActive = 1
{
StateIsActive := 0
}
else
{
StateIsActive := 1
}
return

!^#a::  ;--Hotkey that types either Zerg or Borg
        ;--depending on active/not active, so that you
        ;--may automatically choose the right party in
        ;--your documents in any potential war
If StateIsActive = 1
{
Sendinput, Zerg
}
Else
{
Sendinput, Borg
}
return

答案2

是的。

对于不同应用程序的不同规则,请查看#ifWinActive

例如:

; Make Ctrl+PageUp and Ctrl+PageDown work in Safari
#ifWinActive ahk_class {1C03B488-D53B-4a81-97F8-754559640193}
^PgUp::Send ^+[
#ifWinActive ahk_class {1C03B488-D53B-4a81-97F8-754559640193}
^PgDn::Send ^+]

#ifWinNotActive ahk_class PuTTY
+Ins::Send ^v
#ifWinNotActive ahk_class PuTTY
+Del::Send ^x
#ifWinNotActive ahk_class PuTTY
^Ins::Send ^c

右键单击 AutoHotkey 图标,然后右键单击 Window Spy 来找出 ahk_class 的值。

类似 Vi 中的模式似乎也是可行的。看看科曼德例如。

答案3

为应用程序创建某种模式,你可以使用一些开关(vim 风格),这将改变快捷键要做的事情

您可以使用 AutoHotkey_L 当前发行版(您需要从网站下载)中提供的 #If 语句。您可以编写如下代码:

#If Winactive("window_name") and (Mode = Mode1)

F1::MsgBox, Mode1
::mode::Mode1

#If Winactive("window_name") and (Mode = Mode2)

F1::MsgBox, Mode2
::mode::Mode2

您可以在末尾放置裸的 #If 以完成所有条件。

你说的“标题”是什么意思?你可以制作一个类似工具栏的小窗口,其中包含模式名称或图像,并在更改模式时刷新它,或者借助跟踪当前模式的计时器刷新它。

相关内容