Pergunta

Eu tenho esse código (abaixo) para criar uma tecla de atalho personalizável.

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);
    }

}

Mas o código foi feito para tornar o Hotkey customizável através de uma caixa de pop-up, como eu iria fazê-lo assim que ele iria trabalhar com ou campo. Em seu exemplo de aplicação (da pessoa que fez o código) eles usaram uma caixa de pop-up ligado através de uma ação para o controlador de escolher o Hotkey e um campo de texto ligado a uma NSUserDefaultsController para exibi-lo. Como eu poderia fazer os gravadores de atalho Campo / Botão escolher o Hotkey porque no momento eu ligar a ação eo usuário Deault controlador para ele, mas ele não funciona (ou seja fazer o trabalho de Hotkey). Como seria a necessidade de código a ser alterado para fazê-lo funcionar ou torná-lo fazer o que é deve fazer?

Foi útil?

Solução

Você vai precisar para obter o keycombo do SRRecorderControl. Que tem as bandeiras modificadoras e-código de chave virtual, que você vai usar em seu carbono Event-chave quente. Não se esqueça de dizer a SRRecorderControl para traduzir as bandeiras modificadoras de Cacau para carbono antes de passá-las para RegisterEventHotKey.

Você vai encontrar tudo isso nos cabeçalhos SRRecorderControl e SRCommon.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top