我不想關注窗口,我想用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. 等待用戶關閉窗口獲取來自NSTextField的值 - Cocoa
- 3. 檢測窗口是否是可可中的關鍵窗口
- 4. 你如何獲得Titanium Mobile當前關注的窗口?
- 5. 如何獲得HashTable條目的關鍵字而不是foreach?
- 6. 關鍵窗口不旋轉
- 7. 如何用pygame關注窗口?
- 8. 如何讓SeleniumRC打開Firefox窗口而不關注它們?
- 9. C#隱藏窗口而不是關閉
- 10. 獲得價值的關鍵
- 11. 如何使用python獲得實際的Instagram關注者數量而不是'k'
- 12. 如何關注外國窗口?
- 13. 字符串數據[「關口」]值,而不是在數據[「關口」]
- 14. 在Javascript(而不是JQuery)中,2秒後如何關閉窗口?
- 15. 如何按ESC鍵關閉boxy窗口?
- 16. 關注GNOME停靠窗口
- 17. 關閉窗口時註銷
- 18. 如何在C++中獲得Linux上當前關注窗口的幾何?
- 19. 如何獲得關鍵的,而不是在使用Ruby哈希鍵的值,也省略「:」
- 20. 打開新窗口,不關注它
- 21. 關鍵窗口方向
- 22. 如何判斷用戶是否試圖用C++關閉窗口?
- 23. 如何檢測從右鍵點擊窗口關閉 - >關閉窗口?
- 24. 當窗口沒有關注時,setTimeout()是否有問題?
- 25. 如何使用foreach獲取關鍵值?
- 26. 你如何改變Cocoa窗口關閉按鈕的狀態?
- 27. 如何檢測用戶是否通過紅叉關閉窗口?
- 28. 如何檢查打開的窗口是否用javascript關閉?
- 29. 如何獲得vs goto關閉html標籤而不是使用Visual Studio/Express鍵綁定關閉'>'?
- 30. 線性佈局如何獲得關注?
我不知道如何在可可中做到這一點,但你必須直接查詢鍵盤。如果你沒有焦點,鍵盤按鍵消息將不會發送給你,除非你有一個混雜的消息攔截模式。 – EnabrenTane 2011-01-05 22:55:38
OSX 10.6允許您在全球範圍內註冊鍵盤事件 - 請參閱Dave DeLong的答案和我的答案。 – 2011-01-21 18:38:01