簡體   English   中英

如何在Mac OS X中實現全局鍵盤掛鈎?

[英]How do you implement global keyboard hooks in Mac OS X?

我知道這可以在Windows上完成,並且XGrabKey可以用於X11,但是Mac OS X呢? 我想創建一個類,該類允許設置即使在應用程序窗口處於非活動狀態時也可以調用的快捷鍵。

可可還不支持此功能? 您仍然可以為此使用舊的Carbon庫(與64位兼容),但是不幸的是Apple決定刪除有關此主題的所有文檔。

這里有一篇不錯的博客文章: http : //dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/

這篇文章對我來說有點冗長,所以這里是簡短的版本:

- (id)init {
    self = [super init];
    if (self) {
        EventHotKeyRef  hotKeyRef;
        EventHotKeyID   hotKeyId;
        EventTypeSpec   eventType;

        eventType.eventClass    = kEventClassKeyboard;
        eventType.eventKind     = kEventHotKeyPressed;

        InstallApplicationEventHandler(&mbHotKeyHandler, 1, &eventType, NULL, NULL);

        hotKeyId.signature  = 'hotk';
        hotKeyId.id         = 1337;

        RegisterEventHotKey(kVK_ANSI_C, cmdKey + shiftKey, hotKeyCopyId, GetApplicationEventTarget(), 0, &hotKeyRef);
    }
}

OSStatus mbHotKeyHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData) {
    // Your hotkey was pressed!     
    return noErr;
}

該熱鍵已通過RegisterEventHotKey(…)調用進行RegisterEventHotKey(…) 在這種情況下,它會注冊CMD + Shift +C。

ANSI鍵在HIToolbox / Events.h中定義,因此您可以在此處查找其他鍵(只需按XCode中的CMD + Shift + O,然后鍵入Events.h即可找到它)。

如果要使用多個熱鍵或要從處理程序中調用方法,則必須做更多的工作,但這僅在此答案頂部附近的鏈接中。

我一直在尋找這個問題的簡單答案,所以希望這對其他人有幫助...

看一看addGlobalMonitorForEventsMatchingMask:handler: NSEvent類方法。 另外,您可能會發現快捷記錄器很方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM