50

Mac OS X Finder プラグインを作成するためのガイドまたはサンプル コードを探していますか? いくつかの簡単なアクションを実行する方法を知りたいです。

  1. アイコンへの画像オーバーレイの追加
  2. コンテキスト メニュー項目の追加
  3. ファイルの変更を聞く

次の 2 つのリソースを見つけました。

私はSCPluginコードを見直したいと思っていますが、消化しやすいサンプルを見つけたいと思っていました.

4

8 に答える 8

28

Finderアイコンオーバーレイのサンプルプロジェクトは、小さくて非常に基本的ですが、実際に機能する以下の回答の例を表しています。

https://github.com/lesnie/Finder-Icon-Overlay

これはとても古いことは知っていますが、まだトピックに興味がある人もいるかもしれません(?)

Leopard(10.6)で行ったことは次のとおりです。最初に、適切なFinderのヘッダーが必要です。クラスダンプツールを使用して取得します。次に、コードをSIMBLプラグインとして記述し(その方法についてはドキュメントを参照)、いくつかのメソッドをスウィズリングします。たとえば、ListViewのアイコンの上に何かを描画するには、drawIconWithFrame:TIconAndTextCellメソッドのメソッドをオーバーライドする必要があります。

メソッドスウィズリングのコードは次のとおりです。

+ (void) Plugin_load
{
    Method old, new;
    Class self_class = [self class];
    Class finder_class = [objc_getClass("TIconAndTextCell") class];

    class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
                    class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"v@:{CGRect={CGPoint=dd}{CGSize=dd}}");

    old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
    new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
    method_exchangeImplementations(old, new);

}

「drawIconWithFrame:」メソッドを「FT_drawIconWithFrame:」メソッドでオーバーライドしています。以下は、このメソッドの実装例です。

- (void) FT_drawIconWithFrame:(struct CGRect)arg1
{
    [self FT_drawIconWithFrame:arg1];
    if ([self respondsToSelector:@selector(node)]) {
        if ([[[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent] hasPrefix:@"A"])
            [myPrettyIconOverlayImage drawInRect:NSMakeRect(arg1.origin.x, arg1.origin.y, arg1.size.height, arg1.size.height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    }
}

基本的に、ファイル名が文字「A」で始まるファイルのすべてのアイコンに「myPrettyIconOverlayImage」を描画します。このロジックはあなた次第です。

この行に注意してください。[self FT_drawIconWithFrame:arg1];これは、通常のアイコンや名前などを取得するために「スーパー」を呼び出す方法です。ループのように奇妙に見えますが、実際にはそうではありません。次に、SIMBLプラグインにラップインし、SIMBLをインストールして...実行します。

Lionの変更により、いくつかの作業を最初から行う必要があります(必要なすべての宣言を含む新しい「Finder.h」ファイルを作成し、オーバーライドする適切なクラスとメソッドを見つけます)が、この手法は引き続き機能します。

ハッピーハッキング!

于 2012-01-09T00:00:29.967 に答える
18

残念ながら、Finder プラグインをプログラミングするには、COM をいじる必要がありますSCPlugin プロジェクトの SCFinderPlugin サブプロジェクトを見ると、COM 用の vtable の設定、AddRef/ReleaseRef 関数の作成など、最初のリンクで概説されている手法とまったく同じ手法に従っていることがわかります。古い学校の Carbon メモリ管理、COM スタイルのメモリ管理、および Cocoa/新しいスタイルの Carbon メモリ管理を同時に管理するプラグインを作成することは、信じられないほどの苦痛になる可能性があります。異なる命名規則と呼び出しセマンティクスを使用して、3 つ以上の根本的に異なる API で対話します。状況をヒステリックに貧しいと呼ぶことは、非常に控えめな表現です.

明るい面としては、Mac OS X 10.6 Snow Leopard の Finder は Cocoa で完全に書き直されており、それに伴って非常に優れたプラグイン インターフェイスが付属しています。幸運にも、実際に Snow Leopard しかターゲットにできない状況にある場合は、ADC プレミアまたはそれ以上のメンバーシップを取得し、プレリリース ビルドをダウンロードして、それに対するコードを作成する必要があります。さらに、あなたのプラグインは Cocoa を書き直さないと 10.6 では動かないかもしれません。

于 2009-08-18T15:01:40.633 に答える
15

Finder用の公式またはサポートされているプラ​​グインシステムはありません。OS X 10.6以降では、Finderプロセスにコードを挿入し、FinderプロセスでObjectiveCメソッドをオーバーライドする必要があります。

私はプロプライエタリプロジェクトのためにこれを行いました。このための例やチュートリアルがない理由は、それが非常に困難で時間のかかる開発タスクであるためです。このため、これを達成した個人または組織には、プロセスの詳細を綿密に保護するためのインセンティブがたくさんあります。

Services APIを使用して目標を達成できる方法がある場合は、それを実行してください。Finderプラグインを作成するには、1〜2月の骨の折れる開発と、CおよびObjective-Cの内部に関するかなり深い知識が必要です。

これを実行したいという確信がある場合は、mach_starを入手してください。幸運を。

于 2010-10-15T21:33:36.877 に答える
2

Les Nie によって説明された手法を使用して、Lion および Mountain Lion の Finder アイコン バッジとコンテキスト メニューの完全なソリューションを次に示します。

Liferay Nativityは、関連する Finder メソッドをスウィズルするスクリプト バンドルと、アイコンとコンテキスト メニューを設定するための Java クライアントを提供します。また、Windows および Linux 用の同等のプロジェクトも含まれています。

このプロジェクトは LGPL の下でオープン ソースであるため、バグ修正や改善に貢献してください。

于 2013-07-30T18:18:16.347 に答える
2

私の知る限り、Finder 用の公式のプラグイン アーキテクチャはありません。オンザフライではありませんが、Finder に接続しなくても、外部アプリケーションを介してアイコンにイメージ オーバーレイを追加できる場合があります。Folder Actions と Automator 以外にコンテキスト メニュー項目を追加する方法はないと思います。また、 FSEvents APIを使用してファイル システムの変更を監視する外部アプリケーションを作成することも検討できます。

于 2009-08-18T15:18:48.010 に答える
1

ピッキングはスリムです。Finder プラグインが実際にサポートされているかどうかは、私にははっきりとわかりませんでした。ただし、さらにいくつかのリードがあります。

  • SampleCMPlugIn - もちろん Carbon ベースです。Finder もそうです。ほとんどすべての Finder プラグインは、おそらく 10.6 で動作しなくなることに注意してください。
  • Automator は「Finder プラグイン」として保存できます。これは、あなたが話していることのよりサポートされたバージョンですが、もちろん柔軟性は低くなります。
于 2009-08-18T15:00:47.967 に答える
0

Java から、クロスプラットフォームの方法で Finder/ファイル ブラウザ アイコン オーバーレイとコンテキスト メニューを追加するには、Liferay Nativityライブラリを参照してください。

これについては、Apple の「Finder Sync」ドキュメントと API へのリンクも含まれている別の SO 投稿でも言及しています。

于 2016-02-19T03:03:48.400 に答える