- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用它来检测我的应用程序上的击键...
[NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown
handler:^NSEvent * (NSEvent * theEvent)
好的,我可以使用 theEvent
来了解输入了哪些字符,并了解是否按下了Shift键:
NSString *typedKey = theEvent.charactersIgnoringModifiers;
BOOL shiftDetected = [theEvent modifierFlags] & NSShiftKeyMask;
我的应用程序有一个显示一些按钮的界面,我允许使用键盘而不是单击按钮。该界面有 3 个按钮,特别具有第二个功能。
例如:第一个按钮有 2 个功能,A
和 B
,但该按钮上仅显示 A
标签。假设我指定字母 Q 是该按钮的键盘快捷键。如果用户按下Q
,则执行A
函数。如果用户按 Shift Q
,则执行函数 B
。
但这就是问题所在。我需要检测 Shift
的所有按下或释放,因为当用户按下 Shift
时,我必须从 A
更改该按钮的标签> 到 B
,因此用户知道现在该按钮将导致执行函数 B
而不是 A
。就像键盘一样,按住 Shift
时键盘会从小写变为大写,松开 Shift
时又会变回小写。
我该怎么做?
最佳答案
我使用addLocalMonitorForEvents
函数创建了一个简单的项目。请检查我的代码,它是 Swift 代码,但我认为它应该与 Objective c 相同。
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
NSEvent.addLocalMonitorForEvents(matching: [.flagsChanged, .keyDown]) { (theEvent) -> NSEvent? in
if theEvent.modifierFlags.contains(.shift) {
if theEvent.keyCode == 56 { // this is Shif key
print("Shift START!")
}
else {
print("Shift pressed with keycode \(theEvent.keyCode)")
}
}
else {
if theEvent.keyCode == 56 { // this is Shif key
print("Shift END!")
}
else {
print("Normal keycode \(theEvent.keyCode)")
}
}
return theEvent
}
}
这是 objective-c :
[NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskFlagsChanged|NSEventMaskKeyDown handler:^NSEvent * (NSEvent * theEvent) {
if ([theEvent modifierFlags] & NSEventModifierFlagShift) {
if (theEvent.keyCode == 56) { // this is Shif key
NSLog(@"Shift START");
}
else {
NSLog(@"Shift pressed with keycode %d", theEvent.keyCode);
}
}
else {
if (theEvent.keyCode == 56) { // this is Shif key
NSLog(@"Shift END");
}
else {
NSLog(@"Normal keycode %d", theEvent.keyCode);
}
}
return theEvent;
}];
只需将此部分复制并粘贴到您的 AppDelegate
即可快速测试。
关于macos - 检测 Shift 键的 NSKeyUp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46407741/
我正在使用它来检测我的应用程序上的击键... [NSEvent addLocalMonitorForEventsMatchingMask:NSEventMaskKeyDown
作为一个实验,我试图实现以下目标: 让空格键充当修饰键 - 就像 Shift 键一样 - 按住空格键并键入按键会打印不同的字母。释放空格键会将状态恢复到正常状态,只需按下它就可以像正常的空格键一样。
我是一名优秀的程序员,十分优秀!