CodeLoveプラグイン開発:定番ソフトウェアスキャナーの実装

CodeLoveは拡張可能な開発支援ツールであり、プラグイン機構を通じて機能を柔軟に追加できる。ここでは、システムにインストールされた定番ソフトウェアを自動検出する「SoftwareToScan」プラグインの実装方法を解説する。

1. ExtensionsFrameworkの参照

プラグイン開発には、CodeLoveが提供するExtensionsFramework.dllが必要となる。このDLLはCodeLoveのインストールディレクトリ内に存在し、プラグイン開発のための共通インターフェースやエンティティを提供する。

2. IToolインターフェースの実装

すべてのCodeLoveプラグインはIToolインターフェースを実装する必要がある。このインターフェースは以下のメンバーを持つ:

  • Name:プラグイン名
  • Description:機能の説明
  • Author:作者名
  • Version:バージョン情報
  • Initialize():初期化処理
  • Execute(string[] args):実行時のロジック
  • HotKey:ショートカットキー
  • Alias:起動キーワード
  • AutoStart:起動時自動実行フラグ

以下はSoftwareToScanクラスによる実装例である:

using System;
using System.Windows.Forms;
using ExtensionsFramework.Interfaces;

namespace SoftwareToScan
{
    public class SoftwareScanner : ITool
    {
        private string alias = "scan-software";
        private Shortcut hotkey = Shortcut.None;

        public string Name => "Software Scanner";
        public string Description => "インストール済みの定番アプリケーションを検出";
        public string Author => "dev-team";
        public string Version => typeof(SoftwareScanner).Assembly.GetName().Version.ToString();
        public bool AutoStart { get; set; }

        public Shortcut HotKey
        {
            get => hotkey;
            set => hotkey = value;
        }

        public string Alias
        {
            get => alias;
            set => alias = value;
        }

        public void Initialize()
        {
            // 初期化不要
        }

        public void Execute(string[] args)
        {
            new SoftwareScanForm().ShowDialog();
        }
    }
}

3. ソフトウェア検出ロジックの設計

定番ソフトウェアの検出には主に以下の2つの情報源を利用する:

ショートカットからの収集

デスクトップおよびスタートメニュー内のショートカット(.lnkファイル)を解析し、対象アプリケーションのパスと表示名を取得する。ただし、アクセス権限の制約により、一部のディレクトリは読み取り不能な場合がある。

レジストリからの収集

以下のレジストリキーを走査してインストール済みソフトウェア情報を取得:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

前者は「アプリと機能」に表示されるリスト、後者は「ファイル名を指定して実行」で直接起動可能なアプリケーションの登録情報に対応する。

4. 定番ソフトウェアのマッチング設定

検出したソフトウェアの中から実際に利用価値のあるもののみを抽出するために、マッチングルールを定義するクラスを導入する:

public enum MatchMode
{
    Exact,
    StartsWith,
    Contains
}

public class SoftwareRule
{
    public string DisplayNamePattern { get; set; }
    public MatchMode Mode { get; set; }
    public string ExecutablePath { get; set; }
    public string Keyword { get; set; }
    public string Description { get; set; }
    public string RequiredPathSegment { get; set; }
}

具体的なルール設定例:

var rules = new List<SoftwareRule>
{
    new() { DisplayNamePattern = "Microsoft Visual Studio", Mode = MatchMode.StartsWith, 
            ExecutablePath = @"Common7\IDE\devenv.exe", Keyword = "vs", 
            Description = ".NET IDE", RequiredPathSegment = "Microsoft Visual Studio" },
    new() { DisplayNamePattern = "TeamViewer", Mode = MatchMode.StartsWith, 
            ExecutablePath = "TeamViewer.exe", Description = "リモートデスクトップツール" },
    new() { DisplayNamePattern = "devenv", Mode = MatchMode.Exact, Description = "Visual Studio" },
    new() { DisplayNamePattern = "OUTLOOK", Mode = MatchMode.Exact, Description = "メールクライアント" },
    new() { DisplayNamePattern = "QvodPlayer", Mode = MatchMode.Exact, Description = "メディアプレーヤー" }
};

5. プラグインの配置とテスト

ビルド済みのアセンブリ(.dll)をCodeLoveインストールディレクトリ内のPlusフォルダに配置すると、次回起動時に自動的にロードされる。

タグ: C# CodeLove プラグイン開発 Windowsレジストリ ソフトウェア検出

5月11日 20:47 投稿