标签: keyboard-events

JavaScript - 跨浏览器检测 ESC 键

可能的重复:
jQuery 的转义键的键码

这段小代码对 Firefox 和 Opera 来说就像一个魅力。Internet Explorer 不喜欢它。

window.document.onkeydown = function (e) {   
    if (!e) {
        e = event;    
    }
    if (e.keyCode == 27) {
        myfunction();
    }
}
Run Code Online (Sandbox Code Playgroud)

IE 中不能检测 ESC 的按键吗?谢谢

javascript internet-explorer keyboard-events

5
推荐指数
1
解决办法
6424
查看次数

捕获 Qt 修饰键释放

我是 Qt 的新手,但我正在尝试在 Qt 应用程序中实现基本上相当于视频游戏式输入循环的内容(我知道这很疯狂,但看看你是否能提供帮助)。我需要对所有按键(包括修饰键)的按键和按键释放进行准确的一对一事件处理,无论您如何奇怪地敲击键盘。

当然,您对关键事件的主要访问是通过QKeyEvent。但假设发生以下情况:

  • 用户按住Ctrl
  • 用户按住Up
  • 用户释放CtrlUp同时

据我所知,我从 Qt 得到的是:

  • QKeyEvent 用于按下Ctrl, 本身 ( Qt::Key_Ctrl)
  • QKeyEvent 用于按下Up, 本身 ( Qt::Key_Up)
  • QKeyEvent 用于释放Ctrl+Upkey() == Qt::Key_Up和 Ctrl 位,反映在修饰符更改中。

这可能不完全准确,但这是我对问题进行过多调试后所发生情况的最佳猜测。无论如何,涉及修饰符时的按键释放事件都非常不可靠。

最后的 Ctrl+Up 序列就是问题所在。现在,我知道我正在 中获取修改器状态e->modifiers(),并且正在 中获取按键e->key()。我可以做一些复杂的黑客,尝试在内部记住修改器状态,以检测用户何时释放修改器。但是,Qt 文档告诉我,谈到e->modifiers()

这个函数并不总是可信的。例如,用户可以通过同时按下两个 Shift 键并释放其中一个键来混淆它。

这正是我试图避免的情况

在 Qt 中,是否有任何可靠的方法来跟踪普通键和修饰键的一对一按键按下和释放?如果没有,你能得到的最接近的是什么?

编辑:我可以稍微完善一下。看起来,如果您按住CmdMac,按下几个键(例如字母键),释放它们,然后释放Cmd,您不会收到字母键释放的释放事件。 我将尝试隔离一个小示例,看看这是否确实是 …

keyboard qt keyboard-events

5
推荐指数
1
解决办法
4491
查看次数

为什么“Key Down 事件掩码”不起作用,但“全部掩码”却起作用?

我正在开发一个基本的击键转换器应用程序。该转换适用于以下情况:

CFRunLoopSourceRef runLoopSource = NULL;
CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
Run Code Online (Sandbox Code Playgroud)

正如您所料,kCGEventMaskForAllEvents除了键盘之外,任何鼠标移动或单击都会不断触发,我怀疑会占用系统资源。我尝试替换,我可以从Quartz Event 文档中关于事件类型CGEventMaskBit(kCGEventKeyDown)的最佳信息看出这是我想要的,并且会消除鼠标移动和点击。不幸的是,使用它似乎只是吃掉了击键,而不是转换它们。

我究竟做错了什么?

以下内容有效,但我仍然不明白为什么CGEventMaskBit(kCGEventKeyUp)它本身不是正确的实现。

CGEventMaskBit(kCGEventKeyUp) | CGEventMaskBit(kCGEventKeyDown) | CGEventMaskBit(NX_SYSDEFINED)
Run Code Online (Sandbox Code Playgroud)

keyboard macos cocoa keyboard-events cgeventtap

5
推荐指数
1
解决办法
1398
查看次数

使用 Win32 处理 Ctrl+C

我有一个 Win32 窗口消息循环。CTRL我想通过+拦截“复制到剪贴板” C
我目前的做法是这样处理:

...
case WM_KEYDOWN:
   TranslateMessage(&message);

   // Intercept Ctrl+C for copy to clipboard
   if ('C' == message.wParam && (::GetKeyState(VK_CONTROL)>>15))
   { // do the copy... }
...
Run Code Online (Sandbox Code Playgroud)

除了显式检查击键组合之外,还有更好的方法吗?

有没有某种方法可以注册标准的复制到剪贴板击键然后处理WM_COPY消息?

winapi keyboard-events

5
推荐指数
1
解决办法
1719
查看次数

如何使用adb shell输入来输入&符号?

adb shell input text "&"不起作用,也不起作用adb shell input keyevent KEYCODE_AMPERSAND

与问题7789826相关。

android input keyboard-events adb

5
推荐指数
1
解决办法
3040
查看次数

如何在 MacBook 键盘上点击(钩住)F7 到 F12 以及电源/弹出

这个问题来自如何在 OSX 上挂接/重新映射任意键盘事件?

到目前为止,我可以使用以下方式点击修饰键和大多数其他键:

    _eventTap = CGEventTapCreate( kCGHIDEventTap, 
                                  kCGHeadInsertEventTap,
                                  kCGEventTapOptionDefault,
                                       CGEventMaskBit( kCGEventKeyDown )
                                     | CGEventMaskBit( kCGEventFlagsChanged )
                                     ,
                                  (CGEventTapCallBack)_tapCallback,
                                  (__bridge void *)(self));
Run Code Online (Sandbox Code Playgroud)

值得注意的是,在采取行动之前F3正确报告键码 (160) 。即我可以通过让事件处理程序返回 NULL 来禁用该操作(从而无法传播事件)。

但是,F7 到 F12 和弹出/电源不会触发回调。

如果我添加:

                                     | CGEventMaskBit( NSSystemDefined )
Run Code Online (Sandbox Code Playgroud)

...现在剩余的 Fx 键确实会触发回调(尽管 Power/Eject 仍然不会),但我无法访问事件的 keyCode 方法。

它会产生一个错误:

2015-05-21 12:30:02.044 tap_k[16532:698660] NSSystemDefined: 0 2015-05-21 12:30:02.044 tap_k[16532:698660] * 在 -[NSEvent keyCode]、/SourceCache/AppKit/ 中断言失败AppKit-1347.57/AppKit.subproj/NSEvent.m:2471 2015-05-21 12:30:02.045 tap_k[16532:698660] *由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“发送到事件“NSEvent 的消息无效” : 类型=SysDefined loc=(882,687) 时间=118943.3 标志=0 win=0x0 winNum=0 ctxt=0x0 子类型=8 data1=2560 data2=-1"'

所以要么:
(1)我需要一些其他方式从 …

macos tap objective-c keyboard-events

5
推荐指数
1
解决办法
1156
查看次数

具有 WPF KeyDown 事件的多个键

我正在处理 WPF KeyDown 事件(来自 Windows.Input 的 KeyEventArgs)。我需要识别用户何时单独按下 F1 和 Ctrl+F1。

   private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            MessageBox.Show("ctrlF1");
        }
        if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            MessageBox.Show("F1");
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我按 Ctrl+F1 时,普通的 F1 消息框也会触发。我尝试将 e.Handled 添加到 Ctrl+F1 案例中,但没有帮助。

c# keyboard wpf keydown keyboard-events

5
推荐指数
2
解决办法
1万
查看次数

按住空格键会导致鼠标光标消失

我的网络应用程序具有涉及按住空格键的键盘快捷键。问题是按住空格键时鼠标光标消失。我认为正在发生的事情是浏览器正在尝试向下滚动(即使在我的情况下从来没有任何东西可以向下滚动)。如果用户在按住空格键的同时移动鼠标光标,则光标会在视图中闪烁,只有当鼠标停止移动时才会再次消失。一旦用户释放空格键,鼠标光标将保持隐藏状态,直到再次移动鼠标,之后光标将保持可见。这种情况发生在 Chrome、Safari、Opera (webkit/blink) 中。

在许多事情中,我尝试了preventDefault()on the event 的规范解决方案,无论我在哪里听,它都不起作用。显然,这是可能的,因为我之前使用过的应用程序使用空格键来执行除向下滚动之外的其他操作。

var html = document.documentElement;
var body = document.getElementsByTagName('body')[0];

document.addEventListener("keydown", function(e) {
    console.log("document keydown");
    e.preventDefault();
    e.stopPropagation();
});

window.addEventListener("keydown", function(e) {
    console.log("window keydown");
    e.preventDefault();
    e.stopPropagation();
});

html.addEventListener("keydown", function(e) {
    console.log("html keydown");
    e.preventDefault();
    e.stopPropagation();
});

body.addEventListener("keydown", function(e) {
    console.log("body keydown");
    e.preventDefault();
    e.stopPropagation();
});


document.addEventListener("keypress", function(e) {
    console.log("document keypress");
    e.preventDefault();
    e.stopPropagation();
});

window.addEventListener("keypress", function(e) {
    console.log("window keypress");
    e.preventDefault();
    e.stopPropagation();
});

html.addEventListener("keypress", function(e) {
    console.log("html keypress");
    e.preventDefault();
    e.stopPropagation();
});

body.addEventListener("keypress", function(e) {
    console.log("body keypress");
    e.preventDefault(); …
Run Code Online (Sandbox Code Playgroud)

javascript scroll keyboard-events dom-events

5
推荐指数
1
解决办法
1214
查看次数

在 React 中使用键盘的向上/向下箭头键滚动?

我有一个自定义列表框,div其中包含其他div孩子的垂直列表。我想添加一个向上/向下箭头键导航来更改当前选择的子项。

因此,当我单击第一项并按 时down arrow key,它应该允许我选择第二项(下一项)。如果我单击up arrow key,它应该选择回第一项(上一项)。

const renderInboxSummary = targetDetailsData.map((todo, index) => {
  const hasNewMessageInd = todo.hasNewMessageInd;
  return (
   <div onClick={() => this.handleClick(targetDetailsData, todo.aprReference, index)}>
      <div>
        {todo.aprRecordUserName}
      </div>
      <div>
        {todo.aprBranchCode}
      </div>
      <div>
        {todo.aprScreeName}
      </div>
  </div>
  );
});
Run Code Online (Sandbox Code Playgroud)

每个div都有一个 click 事件处理程序this.handleClick(targetDetailsData, todo.aprReference, index)

在此处输入图片说明

javascript keyboard-events reactjs

5
推荐指数
1
解决办法
9516
查看次数

为什么我的按键动作不能正常工作?

我正在创建一个基本游戏,但我的代码中出现键盘响应问题。当你点击开始时,立方体会一直沿着你按下的箭头键的方向移动,但我希望它移动你用箭头键按下的任何方向,如果没有按下任何键,它就会停止。有人可以告诉我我的代码中有什么错误以及如何正确执行吗?

这是代码:

import  pygame
import  time
import  sys
import  pygame.event as EVENTS
from  pygame.locals import *
import  random

print("Welcome to the prototype of rpg game -Made by Adam Pospíchal.")

pygame.init()

sirka = 800
vyska = 800

okno = pygame.display.set_mode((sirka,vyska))
pygame.display.set_caption("RPG GAME")
#PARAMETRE OKNA#

#PARAMETRE OKNA#

#PARAMETRE KOCKY HRACA#

#PARAMETRE MENU#

#farby - RGB#
RM = 255
GM = 255
BM = 0


player_r = 0
player_g = 255
player_b = 0

player_height = 20 …
Run Code Online (Sandbox Code Playgroud)

python pygame game-development keyboard-events

5
推荐指数
1
解决办法
78
查看次数