Нашел "чистый" метод, путем отсылки событий.
Ошметки кода:
#import
const OSType iTunesSignature = 'hook' ;
#define CMD_NEXT_TRACK 'Next'
#define CMD_PREV_TRACK 'Prev'
#define CMD_STOP 'Stop'
#define CMD_PLAY 'Play'
- (AppleEvent *) newCommandEvent:(AEEventID)eventId {
OSErr err ;
AppleEvent *cmdEvent = malloc(sizeof(AppleEvent)) ;
err = AEBuildAppleEvent(
iTunesSignature,
eventId,
typeApplSignature,
&iTunesSignature,
sizeof(iTunesSignature),
kAutoGenerateReturnID,
kAnyTransactionID,
cmdEvent,
NULL,
"'----':'null'()"
) ;
if (err != noErr) {
NSLog(@"Error creating Apple Event: %d", err) ;
free(cmdEvent) ;
return nil ;
}
return cmdEvent ;
}
- (void)sendCommand:(AEEventID)commandId {
OSErr err ;
AppleEvent *event = [self newCommandEvent:commandId] ;
err = AESendMessage(event, NULL, kAENoReply | kAENeverInteract, kAEDefaultTimeout) ;
if (err != noErr) {
NSLog(@"Error sending AppleEvent: %d", err) ;
}
AEDisposeDesc(event) ;
free(event) ;
}
- (IBAction) doNextTrack:(id)sender {
[self sendCommand:CMD_NEXT_TRACK] ;
}

2 коммент.:
Здорово! Отличный рецепт.
Я думаю, как можно из Cocoa получить текущую позицию проигрываемого в iTunes видео и появления события "Пауза", "Перемотка". Но это слегка другая тема.
to ctrd: щас напишу, есть способ хороший
Отправить комментарий