我如何使用 win32 api 读取击键?我还希望看到它们来自国际键盘,例如德语变音符号。
谢谢
可能的重复:
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 的按键吗?谢谢
我是 Qt 的新手,但我正在尝试在 Qt 应用程序中实现基本上相当于视频游戏式输入循环的内容(我知道这很疯狂,但看看你是否能提供帮助)。我需要对所有按键(包括修饰键)的按键和按键释放进行准确的一对一事件处理,无论您如何奇怪地敲击键盘。
当然,您对关键事件的主要访问是通过QKeyEvent。但假设发生以下情况:
据我所知,我从 Qt 得到的是:
Qt::Key_Ctrl)Qt::Key_Up)key() == Qt::Key_Up和 Ctrl 位,反映在修饰符更改中。这可能不完全准确,但这是我对问题进行过多调试后所发生情况的最佳猜测。无论如何,涉及修饰符时的按键释放事件都非常不可靠。
最后的 Ctrl+Up 序列就是问题所在。现在,我知道我正在 中获取修改器状态e->modifiers(),并且正在 中获取按键e->key()。我可以做一些复杂的黑客,尝试在内部记住修改器状态,以检测用户何时释放修改器。但是,Qt 文档告诉我,谈到e->modifiers():
这个函数并不总是可信的。例如,用户可以通过同时按下两个 Shift 键并释放其中一个键来混淆它。
这正是我试图避免的情况。
在 Qt 中,是否有任何可靠的方法来跟踪普通键和修饰键的一对一按键按下和释放?如果没有,你能得到的最接近的是什么?
编辑:我可以稍微完善一下。看起来,如果您按住CmdMac,按下几个键(例如字母键),释放它们,然后释放Cmd,您不会收到字母键释放的释放事件。 我将尝试隔离一个小示例,看看这是否确实是 …
我正在开发一个基本的击键转换器应用程序。该转换适用于以下情况:
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) 我有一个 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消息?
adb shell input text "&"不起作用,也不起作用adb shell input keyevent KEYCODE_AMPERSAND。
与问题7789826相关。
我在 div *ngFor 循环中有项目,它在所选消息上应用 css 类“message-list-active”。
应用程序.html
<div id="listText" *ngFor="let message of messages; let i=index" activeIndex = i"
[ngClass]="{'message-list-active': activeIndex === i }">
{{message.name}}
</div>
Run Code Online (Sandbox Code Playgroud)
component.ts //使用上下箭头选择消息监听键盘事件
messages; // we have date stored here
activeIndex = 0;
@HostListener("document:keydown", ['$event'])
doSomething(event: KeyboardEvent): void {
if (event.code == "ArrowUp" && this.activeIndex > 0) {
this.activeIndex--
}
if (event.code == "ArrowDown" && this.activeIndex < this.messages.length-1) {
this.activeIndex++
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序.css
#listText {
width: auto;
height:100%;
overflow: auto
}
.message-list-active {
margin: 0;
padding: …Run Code Online (Sandbox Code Playgroud) 我正在使用 PyQt5。当我编写 keyPressEvent 处理程序时,为了调试目的,我希望能够打印一个人类可读的按键被按下的描述。我希望无论如何都能打印这样的东西,无论在事件中按下了多少键,或者它们是修饰符还是“常规”键。
我已经看到了上一个问题,其中接受的答案(使用 C++)建议创建一个 QKeySequence 并使用它的.toString方法。我可以这样做:
def keyPressEvent(self, event):
print("got a key event of ", QKeySequence(event.key()).toString())
Run Code Online (Sandbox Code Playgroud)
但是,这并不总是有效。例如,如果我按下 Shift 键,当我尝试输出(或者如果我尝试将其编码为 UTF-8)时会导致编码错误。这似乎是因为 QKeySequence 不适用于隔离的修饰键:
>>> QKeySequence(Qt.Key_Shift).toString().encode('unicode-escape')
b'\\u17c0\\udc20'
Run Code Online (Sandbox Code Playgroud)
它给出了胡言乱语,而不是我所期望的,即“Shift”。如果我使用它Qt.SHIFT(有点,因为它提供“Shift+”),它会起作用,但这没有用,因为如果我按下 Shift 键,这Qt.SHIFT不是我得到的event.key()。
我怎样才能获得Qt来给我的可打印表示事情可能永远是价值event.key(),这里event是一个QKeyEvent?
我有一个自定义列表框,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)。
我正在创建一个基本游戏,但我的代码中出现键盘响应问题。当你点击开始时,立方体会一直沿着你按下的箭头键的方向移动,但我希望它移动你用箭头键按下的任何方向,如果没有按下任何键,它就会停止。有人可以告诉我我的代码中有什么错误以及如何正确执行吗?
这是代码:
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)