2010-10-07 29 views

Trả lời

16

tôi thực hiện điều này trong ứng dụng của riêng tôi bởi subclassing NSApplication (và thiết lập lớp chính của ứng dụng để lớp con này). Nó bắt các phím tìm kiếm và phát/tạm dừng và dịch chúng thành các hành động cụ thể trong ủy nhiệm ứng dụng của tôi.

dòng liên quan:

#import <IOKit/hidsystem/ev_keymap.h> 

- (void)sendEvent:(NSEvent *)event 
{ 
    // Catch media key events 
    if ([event type] == NSSystemDefined && [event subtype] == 8) 
    { 
     int keyCode = (([event data1] & 0xFFFF0000) >> 16); 
     int keyFlags = ([event data1] & 0x0000FFFF); 
     int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; 

     // Process the media key event and return 
     [self mediaKeyEvent:keyCode state:keyState]; 
     return; 
    } 

    // Continue on to super 
    [super sendEvent:event]; 
} 

- (void)mediaKeyEvent:(int)key state:(BOOL)state 
{ 
    switch (key) 
    { 
     // Play pressed 
     case NX_KEYTYPE_PLAY: 
      if (state == NO) 
       [(TSAppController *)[self delegate] togglePlayPause:self]; 
      break; 

     // Rewind 
     case NX_KEYTYPE_FAST: 
      if (state == YES) 
       [(TSAppController *)[self delegate] seekForward:self]; 
      break; 

     // Previous 
     case NX_KEYTYPE_REWIND: 
      if (state == YES) 
       [(TSAppController *)[self delegate] seekBack:self]; 
      break; 
    } 
} 
+0

Tôi nhận được thông báo điều khiển lạ này. Bất kỳ đầu mối tại sao? Ngoài ra, tôi đang phát nhạc và tôi chỉ muốn nó phát nút phát/tạm dừng. Khối lượng có thể được thực hiện trên hệ điều hành X GUI thông thường. – Moshe

+0

Thông báo điều khiển lạ nào? Ngoài ra, nếu bạn muốn bắt chỉ phát/tạm dừng, thì chỉ trả lời NX_KEYTYPE_PLAY (loại bỏ các trường hợp khác). –

+0

@Joshua Nozzi - xem chỉnh sửa của tôi. – Moshe

-1

Trong trường hợp bất cứ ai đi kèm tìm kiếm, có sample code to do this here. Cách tiếp cận này cho phép bạn "ăn" các sự kiện mà họ không truy cập được iTunes hoặc các ứng dụng nhận biết khóa phương tiện khác.

Nhưng được cảnh báo rằng vòi sự kiện không được hộp cát cho phép, vì vậy thao tác này sẽ không hoạt động trong App Store. Nếu bất kỳ ai có giải pháp thay thế cho rằng Tôi rất muốn nghe điều đó.

-1

Kiểm tra điều này: https://gist.github.com/gauravk92/546311 Hoạt động hoàn hảo.

Ví dụ: repo này sử dụng: https://github.com/onepill/PauseIt

+0

Nhưng điều này không hoạt động trong App Sandbox hoặc có điều gì đó bạn có thể làm về việc này không? – plaetzchen

+0

Có. Bạn cần phải sử dụng một công việc khác xung quanh với một ứng dụng trợ giúp (mà cuối cùng sẽ không được sandboxed). Kiểm tra điều này: https://github.com/tredds/MagicKeys. Ví dụ: ứng dụng: https://itunes.apple.com/app/vox/id461369673?mt=12&ign-mpt=uo%3D4 với http://coppertino.com/addon/ –

Các vấn đề liên quan