【问题标题】:How to over-ride system short-cut inside processing如何在处理中覆盖系统快捷方式
【发布时间】:2016-05-01 06:19:43
【问题描述】:

如何使用Processing记录系统正在使用的快捷方式?

如果我尝试记录 Apple-Key + Alt-key + Esc-key(在 OSX 中打开强制退出应用程序窗口)Esc-key 永远不会到达 keyPressed 事件。

虽然按Esc-key 会自行关闭窗口,但仍会在Processing 中接收keyCode:

void keyPressed() {
    println(keyCode);
}

所以我的问题是。当Esc-key 触发系统事件时,我怎样才能收到它。甚至更好地覆盖系统事件。

【问题讨论】:

  • 有核心处理和Java?这不会发生。为此,您需要可以接近操作系统的代码,这意味着 JNI、JNA 或使用特定于操作系统的库。

标签: java macos keyboard keyboard-shortcuts processing


【解决方案1】:

如果我没记错的话,退出时退出函数会在 keyPressed() 事件之后运行,所以你可以这样做:

void keyPressed(){
  if(key==27){
    < insert code here >
    key=0;
  }
}

这会使处理过程误以为转义键不是按下的键。

另一方面,操作系统键绑定不能被覆盖(例如 Windows 中的 alt-f4 强制关闭应用程序。这不能被禁用,因为这是您退出不会让您离开其界面的程序的方式)。这是一项安全功能。

旁注:如果您想像应用程序退出示例一样计算多个按键按下,每次按下都会触发一个 keyPressed 事件,即使它们是同时按下的,所以您必须记录 keyPressed 时按下的按键( ) 被触发并记录当 keyReleased() 被触发时它们不再被持有。示例代码:

boolean isControlPressed=false;


void keyPressed(){
  if(key==CODED && keyCode==CONTROL)isControllPressed=true;
  else if(key == 'c' || key == 'C'){
    if(isControlPressed){
      //do control-c stuff
    }
  }
}

void keyReleased(){
  if(key==CODED && keyCode==CONTROL)isControllPressed=false;
}

编辑:我在检查是否为 c 时不检查正在编码的键是不好的做法,不要效仿,我打字很快。

另外我认为在应用程序关闭时运行一个函数,如果出现问题,您可以使用它来快速保存数据

【讨论】:

  • 您是否尝试按照要求在 Mac 上录制 Apple-Key + Alt-key + Esc-key?因为问题是 Esc-key 没有到达 keyPressed 函数。
  • Esc-key 不是系统快捷方式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2011-04-01
  • 2021-11-23
相关资源
最近更新 更多