Eu posso fazer este trabalho de código com gravador de atalho?
-
23-08-2019 - |
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?
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.