2009-07-06 12 views
1

Ich habe diesen Code (unten), um einen anpassbaren Hot Key zu erstellen.Kann ich diesen Code mit Shortcut Recorder arbeiten lassen?

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

} 

Aber der Code wurde gemacht, um den Hotkey Anpassbare über eine Popup-Box zu machen, wie würde ich es so machen, es mit Shortcut RecordersButton Or Field. In ihrem Beispiel-Anwendung (von der Person, die den Code gemacht) arbeiten würde sie verwendeten eine Popup-Box, die über eine Aktion mit dem Controller verbunden ist, um den Hotkey und ein Textfeld auszuwählen, das mit einem NSUserDefaultsController verbunden ist, um es anzuzeigen. Wie würde ich die Shortcut Recorders Feld/Button wählen Sie die Hotkey, weil im Moment verbinde ich die Aktion mit und der Benutzer Deault Controller, aber es funktioniert nicht (d. H. Die Hotkey arbeiten). Wie müsste der Code geändert werden, damit er funktioniert oder etwas tun kann?

Antwort

3

Sie müssen die KeyCombo von der SRRecorderControl erhalten. Das hat die Modifikatorflags und den virtuellen Schlüsselcode, die Sie in Ihrem Carbon Event-Hotkey verwenden. Vergessen Sie nicht, dem SRRecorderControl mitzuteilen, dass die Modifizierungsflags von Cocoa auf Carbon übertragen werden, bevor Sie sie an RegisterEventHotKey übergeben.

Sie finden diese in den Kopfzeilen SRRecorderControl und SRCommon.

+0

Ich sehe, wie würden Sie dem SRRecorderControll sagen, die Modifikator-Flags von Cocoa zu Carbon zu übersetzen? – Joshua

+0

Mit der Methode, die es für diesen Zweck hat. –

+0

Ah Ok, so ist dieser Teil des Codes der Keycombo '_KeyCombo { \t unsigned int Flags; // 0 für keine Flags \t signierter Funktionscode; // -1 für keinen Code } KeyCombo; '? Wie würde ich die Modifier-Flags und den Code für virtuelle Schlüssel im Hot Key verwenden? – Joshua

Verwandte Themen