如何在不参考 NSEvent 的情况下在 Objective-C 中获取键盘状态
Posted
技术标签:
【中文标题】如何在不参考 NSEvent 的情况下在 Objective-C 中获取键盘状态【英文标题】:How to get keyboard state in Objective-C without referring to NSEvent 【发布时间】:2011-08-25 00:25:36 【问题描述】:是否可以不参考NSEvent
而在Objective-C中获取键盘状态?
一般我不能使用NSResponder
之类的-[NSResponder flagsChanged:]
方法,但我需要知道当前是否按下了Command 键。
【问题讨论】:
嗯。 为什么不能参考NSEvent? 从今天开始这个问题的答案应该会有所帮助:***.com/questions/5994656/… @Grady:+[NSEvent modifierFlags]
不使用 an 事件,它使用 NSEvent
类,该类在任何包含 AppKit 的应用程序中都可用。 (如果你不使用 AppKit,为什么你需要知道键盘在做什么,这超出了我的理解。)GetCurrentKeyModifiers()
不会知道一个事件,如果它出现并咬在 a** 上——但它是碳,而且,我承认,不是最好的解决方案。如果 shpoont 详细说明为什么不能使用 NSEvent
,这将对回答者有所帮助。
对不起,我看错了,我指的是 [NSApp currentEvent] ... 你说得对,GetCurrentKeyModifiers() 不是一个事件,或者真棒。
【参考方案1】:
我仍然想知道为什么你不能使用NSEvent
,但我还是要回答这个问题。也许你正在构建一个“命令行工具”并且只与 Foundation 相关联?你将不得不包含至少一个更多的框架。如果你想链接到 AppKit,你可以(正如我在 cmets 中提到的)使用+[NSEvent modifierFlags]
;这是NSEvent
上的一个类方法,因此您可以在任何地方使用它,而无需访问单个事件,以获取修饰键的当前状态作为位掩码。文档解释了meaning of the bitmask。
if( NSCommandKeyMask & [NSEvent modifierFlags] )
NSLog(@"Oh, yeah!");
您也可以使用Quartz Event Services 获取此信息。在这种情况下,您必须包含 ApplicationServices 框架*。 CGEventSource functions 将为您提供您从NSEvent
获得的same bitmask:
CGEventFlags theFlags;
theFlags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState);
if( kCGEventFlagMaskCommand & theFlags )
NSLog(@"Uh huh!");
*如果您实际上正在编写一个 Cocoa 应用程序,那么它已经包含在内——它是 Quartz 的一部分。
【讨论】:
谢谢乔希,这正是我所需要的以上是关于如何在不参考 NSEvent 的情况下在 Objective-C 中获取键盘状态的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 JNDI 的情况下在 ConnectionFactory 中指定主机、端口和通道