4

我正在寻找仅在 Google Chrome 中可用的某个热键:

hs.hotkey.bind({"cmd"}, "0", function()
  if hs.window.focusedWindow():application():name() == 'Google Chrome' then
    hs.eventtap.keyStrokes("000000000000000000")
  end
end)

这种方法的问题是热键将无法在其他应用程序上使用。例如CMD+0不会触发Reset ZoomDiscord 中的命令。

我怎样才能防止这种情况?

4

1 回答 1

3

hs.hotkeyAPI 不提供能够传播捕获的 keydown 事件的功能。API 可以,但使用hs.eventtap它会涉及监视每个 keyDown事件。

我将指出一个有点相关的GitHub 问题中提到的内容:

如果您希望组合键对大多数应用程序执行某些操作,而不是针对少数特定应用程序,则最好使用窗口过滤器或应用程序观察器并在活动应用程序更改时启用/禁用热键。

换句话说,对于你想要实现的,建议你使用hs.window.filterAPI​​在进入应用程序时启用热键绑定,并在离开应用程序时禁用它,即:

-- Create a new hotkey
local yourHotkey = hs.hotkey.new({ "cmd" }, "0", function()
    hs.eventtap.keyStrokes("000000000000000000")
end)

-- Initialize a Google Chrome window filter
local GoogleChromeWF = hs.window.filter.new("Google Chrome")

-- Subscribe to when your Google Chrome window is focused and unfocused
GoogleChromeWF
    :subscribe(hs.window.filter.windowFocused, function()
        -- Enable hotkey in Google Chrome
        yourHotkey:enable()
    end)
    :subscribe(hs.window.filter.windowUnfocused, function()
        -- Disable hotkey when focusing out of Google Chrome
        yourHotkey:disable()
    end)
于 2020-09-28T04:02:08.327 回答