我有这样的代码(下面),以创建自定义的热键。

OSStatus MyHotKeyHandler(EventHandlerCallRef nextHandler,EventRef theEvent,void *userData)
{
    EventHotKeyID hkCom;
    GetEventParameter(theEvent,kEventParamDirectObject,typeEventHotKeyID,NULL,sizeof(hkCom),NULL,&hkCom);
    HotKeyController *controller = (HotKeyController *)userData;
    int l = hkCom.id;
    switch (l) {
        case 1: [controller->window makeKeyAndOrderFront:NSApp];  
            break;
        case 2: [controller->searchWindow makeKeyAndOrderFront:nil];
            break;
        case 3: [controller->entryWindow makeKeyAndOrderFront:nil];
            break;  
    }
    return noErr;
}

- (void)awakeFromNib
{
    //Register the Hotkeys
    EventHotKeyRef gMyHotKeyRef;
    EventHotKeyID gMyHotKeyID;
    EventTypeSpec eventType;
    eventType.eventClass=kEventClassKeyboard;
    eventType.eventKind=kEventHotKeyPressed;


    InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,(void *)self,NULL);

    gMyHotKeyID.signature='htk1';
    gMyHotKeyID.id=1;
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeMain"]!=-999) {
        RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeMain"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersMain"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef);
    }

    gMyHotKeyID.signature='htk2';
    gMyHotKeyID.id=2;
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeSearch"]!=-999) {
        RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeSearch"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersSearch"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef);
    }

    gMyHotKeyID.signature='htk3';
    gMyHotKeyID.id=3;
    if([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeEntry"]!=-999) {
        RegisterEventHotKey([[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyCodeEntry"], [[NSUserDefaults standardUserDefaults] integerForKey:@"hotkeyModifiersEntry"], gMyHotKeyID, GetApplicationEventTarget(), 0, &gMyHotKeyRef);
    }

}

但使代码通过一个弹出框,使热键可自定义的,我会怎么做它,所以它会与的快捷方式录音机 按钮或字段。的在他们的示例应用程序(从谁做的代码的人)它们用于通过一个动作连接的弹出框到控制器以选择热键和连接到NSUserDefaultsController文本字段中显示它。我将如何让快捷录音机字段/按钮选择热键,因为此刻我连接动作和用户Deault控制器到它,但它不工作(即做热键工作)。如何将需要的代码改变,使其工作或者让它做什么是应该做的?

有帮助吗?

解决方案

您将需要从SRRecorderControl得到KeyCombo。具有修正标志和虚拟键码,你会在你的碳事件热键使用。不要忘了告诉SRRecorderControl从可可中的修正标志转化为碳您传递他们RegisterEventHotKey之前。

您会发现所有的这些在SRRecorderControl和SRCommon头。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top