2012-04-29 155 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