我不想關注窗口,我想用Cocoa獲得關鍵值。 如果你知道,請教我。如何用Cocoa獲得關鍵值,而不管是否關注窗口
2
A
回答
3
如果我理解了這個問題,即使您的應用程序/窗口不是最前面的窗口,您也想知道何時按下了某個鍵?
如果是這種情況,您正在使用+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
(僅限10.6+)或使用CGEventTap
。
0
我最近asked this question和使用addGlobalMonitorForEventsMatchingMask,就像Dave Delong所說的那樣,@NSGod指出了我。
我有麻煩搞清楚塊語法,雖然如此,我會從我貼到這個問題的答案代碼引用:
// register for keys throughout the device...
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(struct NSEvent *event){
NSString *chars = [[event characters] lowercaseString];
unichar character = [chars characterAtIndex:0];
NSLog(@"keydown globally! Which key? This key: %c", character);
}];
牢記與塊的事情是,他們是直接提供到方法調用。我對my own question附加了更全面的描述,但如果您遵循上述語法並將該塊視爲「內聯委託方法」,則應該做得很好。
1
要使用addGlobalMonitorForEventsMatchingMask或CGEventTap,您的應用程序需要以root身份運行。我一直無法使NSEvent方法適用於我,但CGEventTap以root身份工作。
的CGEventTap方法的優點是:
- 您收到的所有事件,即使是那些你自己的應用程序。 (另一種方法不會將您自己的事件發送給您)
- 您可以在各個級別(在窗口服務器之前,在會話服務器之前等)點擊事件
- 如果需要,您可以修改事件。
相關問題
- 1. 如何獲得關鍵代碼,同時關注任何窗口應用程序
- 2. 如何關閉窗口而不是JFrame
- 3. 打開pyglet窗口而不關注
- 4. 等待用戶關閉窗口獲取來自NSTextField的值 - Cocoa
- 5. 檢測窗口是否是可可中的關鍵窗口
- 6. 你如何獲得Titanium Mobile當前關注的窗口?
- 7. 如何獲得HashTable條目的關鍵字而不是foreach?
- 8. Objective-C Cocoa中的關鍵窗口是什麼?
- 9. 使用SED獲得兩個關鍵詞(而不是關鍵詞本身)
- 10. 如何用pygame關注窗口?
- 11. 關鍵窗口不旋轉
- 12. 如何讓SeleniumRC打開Firefox窗口而不關注它們?
- 13. C#隱藏窗口而不是關閉
- 14. 關注wpf窗口上的快捷鍵
- 15. C# - 如何關閉當前窗口,並獲得新窗口
- 16. Python - 我如何獲得Ubuntu上關注窗口的進程名稱(不是窗口標題)
- 17. 獲得價值的關鍵
- 18. 如何關注特定窗口?
- 19. 如何在Chrome中關注opener窗口?
- 20. 如何關注外國窗口?
- 21. 如何使用python獲得實際的Instagram關注者數量而不是'k'
- 22. 字符串數據[「關口」]值,而不是在數據[「關口」]
- 23. VIM拆分窗口:關注新窗口
- 24. 如何按ESC鍵關閉boxy窗口?
- 25. 在Javascript(而不是JQuery)中,2秒後如何關閉窗口?
- 26. 關閉窗口時註銷
- 27. 防止關注python窗口
- 28. 關注GNOME停靠窗口
- 29. 如何在C++中獲得Linux上當前關注窗口的幾何?
- 30. 如何獲得關鍵的,而不是在使用Ruby哈希鍵的值,也省略「:」
我不知道如何在可可中做到這一點,但你必須直接查詢鍵盤。如果你沒有焦點,鍵盤按鍵消息將不會發送給你,除非你有一個混雜的消息攔截模式。 – EnabrenTane 2011-01-05 22:55:38
OSX 10.6允許您在全球範圍內註冊鍵盤事件 - 請參閱Dave DeLong的答案和我的答案。 – 2011-01-21 18:38:01