System-wide hotkey for an application

2019-01-13 12:19发布

问题:

I have a simple window with 3 buttons and I am trying to add a system-wide hot key so i can "press" those buttons without having to switch to that app, press a button and then go back to what I was doing.

Something like Cmd + Shift + 1 press button 1, Cmd + Shift + 2 press button 2, etc.

Is there any way to achieve this in Cocoa (with Objective-C)? Thanks, code is appreciated since I am a total newbie on Cocoa.

回答1:

I also didn't like PTHotKey, so I ended up writing a new wrapper, available here:

http://github.com/davedelong/DDHotKey

edit

The 2 files you'd need are:

  • DDHotKeyCenter.h
  • DDHotKeyCenter.m

And you'd use it something like this:

- (IBAction) registerHotkey:(id)sender {
  DDHotKeyCenter * c = [[DDHotKeyCenter alloc] init];
  if (![c registerHotKeyWithKeyCode:kVK_ANSI_1 modifierFlags:(NSCommandKeyMask | NSShiftKeyMask) target:self action:@selector(hotkeyWithEvent:) object:nil]) {
    NSLog(@"unable to register hotkey");
  } else {
    NSLog(@"registered hotkey");
  }
  [c release];
}

- (void) hotkeyWithEvent:(NSEvent *)hkEvent {
  NSLog(@"Hotkey event: %@", hkEvent);
}


回答2:

PTHotKey is old and busted (generates reams of warnings) on modern SDKs. Use SGHotKeysLib instead.

Both SGHotKeysLib and PTHotKey are reusable source code. You need only add the classes to your own project, then use them from your own classes.



回答3:

There is a library called PTHotKey that makes this fairly easy. You can google PTHotKey or just grab it from http://code.google.com/p/shortcutrecorder/source/browse/trunk/Demo/HotKey/?r=2