如何获取快捷方式的平台特定信息?

时间:2017-11-23 17:16:27

标签: javascript python language-agnostic keyboard-shortcuts key-bindings

如何为特定进程获取特定于平台的快捷方式或键绑定?

作为示例,如何获取 Windows 复制的快捷方式 Ctrl + C 的信息? (如果可能的话,我喜欢所有标记语言的信息)我的意思是文本编辑和文件管理器使用,也想知道他们是否独立。

2 个答案:

答案 0 :(得分:1)

如果我理解你,你想要重写浏览器的系统命令。在浏览器中,所有进程在某些事件后启动如果使用命令进行复制,则可以复制文本:document.execCommand('copy');并且您可以重写除paste之外的所有事件。 示例:

 document.addEventListener('keydown', (ev) => {
        if(ev.keyCode === 67 && ev.ctrlKey === true) { // ctrl+c
          console.log(ev);
         ev.preventDefault();//block default action of browser
        }
    });

并触发副本:

 document.addEventListener('keydown', (ev) => { //ctrl+z
        if(ev.keyCode === 90 && ev.ctrlKey === true) {
          console.log(ev);
          document.execCommand('copy');
          ev.preventDefault();
        }
    });

所有execCommand:https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand

答案 1 :(得分:0)

为了扩展我上面的评论,您需要检查 evt.metaKey 以捕获标准的 macOS 快捷方式,这些快捷方式使用与 Windows (X/C/V /Z),但与不同的命令 (⌘) 修饰键结合使用。

在大多数情况下,如果 Mac 用户可以使用他们的控制键和命令键作为快捷方式,这不会有什么坏处,因此最简单的解决方案是检查两者。以下是修改前一个答案中的代码:

document.addEventListener('keydown', (ev) => {
  if (ev.keyCode === 67 && (ev.ctrlKey || ev.metaKey)) { // Copy shortcut
    console.log(ev);
    ev.preventDefault(); // block default action of browser
  }
});

在 Windows 系统上,您可能永远不会看到 metaKey 为 true 的键盘事件,因为据我所知,任何使用 Win 键 (⊞) 的按键,理论上映射到 {{ 1}},在 Web 浏览器有机会查看它之前,将被 Windows 拦截。

如果您想了解有关按键事件和修饰键的更多信息,我为此准备了一个快速的 CodePen:https://codepen.io/kshetline/pen/MWmKrPM?editors=1010