2011-08-09 15 views
3

曲やアルバムをクリックしたときにiTunesが動作する方法を変更しようとしています。クリックを傍受してそのアイテムを再生するのではなく、そのアイテムを特定のプレイリストに追加します。 私はNSDistributedNotificationCenterからキャプチャしてクリックイベントを傍受しようとしていましたが、これを伝播を止めてプレイリストに追加するApple Scriptを実行しました。 問題はiTunesのマウスクリックを傍受できないことです。これで私を助けることができますか?iTunesをクリックして、再生の代わりにエンキューします。

ありがとうございました。

答えて

4

これは、SIMBLプラグインを作成することで、iTunes(アプリケーション自体)にアクセスできるようになり、そこからメソッドをスウィズルする必要があります。再生ボタンはあなたが望むことをあなた自身の方法にトリガーします。

あなたの質問から、AppleScriptを実行して、選択したアイテムをプレイリストに追加すると思います。 AppleScriptを使ってこれを行う方法については、herehereの情報があります。

SIMBL check out the websiteの詳細については、this tutorialのSIMBLプラグインのビルドについて、どこから開始するのかわからない場合はこちらをご覧ください。

+0

私はSIMBLを見ましたが、iTunesの「再生」機能を置き換える「方法スウィズル」技術が最適な選択肢だと思います。しかしそれでもまだ苦労している。 :) – lamelas

+0

ええ、それは確かに簡単ではありません。最も難しいのは、再生ボタンが呼び出すアクションを見つけることです。クラスダンプと呼ばれるツールがあります。詳細はこちら[こちら](http://www.codethecode.com/projects/class-dump/)をご覧ください。 – Joshua

+0

ありがとうございます!私は既にSIMBLのチュートリアルを見ていて、iTunesが使用するすべてのCocoa関数を使ってiTunes.hを作成しました。私は今、メソッド・スウィズルに苦しんでいます。私はうまくいかないようです。 – lamelas

1

アクセシビリティAPIを使用してiTunesウィンドウ/再生ボタンの位置を追跡し、アクティブなマウスをクリックするためにアクティブなCGEventTapをインストールする方法もあります。クリックがiTunesボタンに表示されたら、イベントタップコールバックからNULLを返すことで、イベントがiTunesに伝播するのを防ぐことができます。

SIMBLメソッドと比較した場合の主な利点は、iTunesの内部実装に依存しないため、iTunesが更新されて内部メソッド/関数が変更されても引き続き動作することです。

+0

いい答え。私はアクセシビリティAPIを 'NSEvent'の' addGlobalMonitorForEventsMatchingMask:handler: 'と組み合わせてマウスを検出し、それが再生ボタンに向けられているかどうかを確認しましたが、iTunesに届くのを防ぐ手段はないと知っていました'CGEventTap'がそれを扱うことができるようになりました。 +1! – Joshua

+0

これにより、個々の曲のクリックや、再生/一時停止ボタンのクリックだけを傍受できますか?あなたの答えをありがとう! :) – lamelas

2

これは、クリックを傍受するのではなく、NSDistributedNotificationCenterを使用してこれを行う別の方法が見つかりました。 iTunesは、プレイヤーの状態が変更されたときに配信通知をポストします。これには、再生ボタンが押されたことが含まれます。

あなたはcom.apple.iTunes.playerInfoと呼ばれるこの通知を購読することができます。それを受け取ると、プレイヤーの状態が再生中であることがわかります。ボタンが押されたことがわかっている場合は、AppleScriptを実行して音楽を一時停止/ (例えば、選択した曲をプレイリストに追加するなど)を行います。 enter image description here

だけで次の操作を行い、通知を購読するにしてiTunesPlayerStateChanged:メソッドを実装します。

通知はまた、あなたがここに見ることができるすべては、他の多くの情報を提供します。

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(iTunesPlayerStateChanged:) name:@"com.apple.iTunes.playerInfo" object:nil]; 
関連する問題