Я создаю утилиту, которая позволяет мне управлять iTunes (через библиотеку COM) с помощью горячих клавиш. Горячие клавиши работают, и управление iTunes, как следующий и предыдущий трек все работает.
Другая часть этой утилиты - показывать уведомления об изменении песни. Посредством некоторого чтения и экспериментов я обнаружил, что правильное событие на iTunesAppClass
было OnPlayerPlayEvent
, и поэтому, когда я подключил это к уведомлениям в трее, оно работало абсолютно идеально.
Проблема, с которой я столкнулся, заключается в том, что в подавляющем большинстве случаев, когда я запускаю свою программу, это событие вообще не вызывается. Однако редко, без каких-либо изменений в моем коде , событие возникает, и появляется моя подсказка.
Вот как я настраиваю свой объект iTunes:
itunes = new iTunesAppClass();
itunes.OnPlayerPlayEvent += new _IiTunesEvents_OnPlayerPlayEventEventHandler(itunes_OnPlayerPlayEvent);
А это обработчик событий:
private void itunes_OnPlayerPlayEvent(object iTrack)
{
IITTrack track = iTrack as IITTrack;
CurrentTrack = track;
// ... notification.
}
Есть идеи?
РЕДАКТИРОВАТЬ: После еще нескольких попыток кажется, что события запускаются, когда открывается новый экземпляр iTunes, и мое приложение впервые подключается к этому экземпляру. То есть, если и iTunes, и моя утилита (с рабочими уведомлениями) открыты, если я закрою и снова открою свою утилиту, ее уведомления не будут работать. Однако, если я закрою и снова открою iTunes, то моя утилита уведомлений будет работать.
Кажется, это проблема, так как, если я закрою свою утилиту, а затем попробую закрыть iTunes, iTunes скажет мне, что интерфейс сценариев все еще используется приложениями (, хотя это не ).
Похоже, что либо iTunes будет запускать событие только для первого зарегистрированного приложения, либо iTunes пытается запустить событие для несуществующего приложения, завершается ошибкой и останавливается, прежде чем запустить его для других приложений.
Итак, я должен спросить: есть ли способ отменить регистрацию моего приложения в iTunes при выходе? Или, может быть, даже отмените регистрацию всех зарегистрированных приложений, кроме моего?