2012-04-29 79 views
6

是否有可能在用户每次按下按键时运行方法。基本上我想在按下按键时运行iPhone或iPad上的声音。 我不希望在我的窗口或某个控件中检测到按键,我想要检测所有按键(例如,当他们在Safari中输入什么内容时)我不需要知道密钥是什么Objective-C/Cocoa:检测所有按键

感谢

+0

这是一个有点题外话,但目前已经是现有做到这一点的应用程序:http://sustworks.com/site/prod_keyclick_overview.html(然而付费软件) – Teak 2012-04-29 01:49:55

回答

11

使用CGEventTapCreate这里记载:

https://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html

或者使用NSEvents addGlobalMonitorForEventsMatchingMask:handler:这里记载:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsevent_Class/Reference/Reference.html

NSEvent例子:

[NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:^(NSEvent *event){ 
    [self keyWasPressedFunction: event]; 
    //Or just put your code here 
}]; 

我想说NSEvents更容易。 ..

注:

出于安全原因,苹果要求你“启用辅助设备的访问”系统偏好设置开启,为了使用上述方法醚。

+0

是的,一个示例会很有用,谢谢。 – 2012-04-29 01:55:38

+0

@Oliver:好的,添加NSEvent示例,CGEventTaps要复杂得多,对于你想要做的事情来说不是必需的。 – Teak 2012-04-29 02:08:35

3

你可以得到相当接近有石英事件丝锥,但有些按键都不能检测甚至一个安全。

着想。如果你告诉我们你心目中的大目标,我们可以提出其他建议,您是否正在尝试为您的应用建立一个全球热键?您正在编写键盘记录程序还是恶意软件?什么?

+0

所有我想要要做的就是制作一款应用程序,当他们按下某个键时,可以播放iPad或iPhone按键的敲击噪音。 – 2012-04-29 01:44:05

+3

然后,你应该看看事件水龙头。同样,出于安全原因,并非所有按键都可以被检测到(例如,当使用密码字段时,您无法获得按键事件。) – 2012-04-29 01:44:56

1

使用NSEvents addGlobalMonitorForEventsMatchingMask:handler:

applicationDidFinishLaunching添加以下代码,建立&去!

[NSEvent addGlobalMonitorForEventsMatchingMask:(NSKeyDownMask) handler:^(NSEvent *event){ 
NSLog(@"%@", event.characters); 
}]; 

Apple要求您在系统偏好设置中启用“启用对辅助设备的访问”。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/nsevent_Class/Reference/Reference.html

+0

不要忘记在applicationWillClose函数中释放监视器 – jQwierdy 2015-10-21 19:03:40