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

How to get platform specific info for shortcuts?

提问人:Nae 提问时间:11/24/2017 最后编辑:Nae 更新时间:7/6/2021 访问量:223

问:

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

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

javascript python 与语言无关 的键盘快捷键 绑定

评论

0赞 ibrahim mahrir 11/24/2017
不是通用的???Ctrl + C
3赞 Eugene Sh. 11/24/2017
我真的怀疑除了“你不能”之外,你的问题有一个笼统的答案。
0赞 cdarke 11/24/2017
@ibrahimmahrir:不,它不是普遍的。看看宿敌和.vi(1)emacs(1)
0赞 Eugene Sh. 11/24/2017
@cdarke 鉴于这一点以及 Windows 的事实......这个问题变得毫无意义,因为没有“用于复制的 Windows 快捷方式”。vi
1赞 mnistic 11/24/2017
每个应用程序都定义了自己的文本编辑快捷方式,它不是操作系统设置。至于文件管理器,您可以安全地使用标准的资源管理器快捷方式(等),因为其他快捷方式都基于它。然后,您可以有一个“例外”列表来处理您可能遇到的任何行为不像资源管理器的列表。Ctrl + C

答:

1赞 Petrashka Siarhei 11/24/2017 #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

0赞 kshetline 7/6/2021 #2

为了扩展我上面的评论,您需要检查以捕获标准的 macOS 快捷方式,这些快捷方式对基本的剪切/复制/粘贴/撤消使用与 Windows (X/C/V/Z) 相同的字母键,但结合使用不同的命令 (⌘) 修饰键。evt.metaKey

在大多数情况下,如果 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 系统上,您可能永远不会看到 true 的键盘事件,因为据我所知,任何使用 Win 键 (⊞) 的按键(理论上映射到 )都会在 Web 浏览器有机会查看之前被 Windows 拦截。metaKeymetaKey

如果你想探索更多关于键事件和修饰键的信息,我在这里整理了一个快速的 CodePen:https://codepen.io/kshetline/pen/MWmKrPM?editors=1010