.NET実践プログラミング

.NETでカスタム・プラグインを開発できる「Google Deskbar」

デジタルアドバンテージ
2004/12/15
Page1 Page2 Page3

■コマンドプロンプトを実行するプラグイン

 プラグインを使ったGoogle Deskbarの拡張にはさまざまな可能性が秘められていると思われるが、筆者も少しは実用性のある(と思われる)プラグインを作成してみたので、最後にそのコードをサンプルとして示しておく。

 このプラグインは、これまでコマンドプロンプト内から実行していたコマンドをGoogle Deskbarから実行し、その出力結果をブラウザで表示するものだ。

 コマンドプロンプトを開いて、例えばWindowsのネットワーク設定を確認するために「ipconfig /all」を実行したり、pingコマンドを実行したりすることは(筆者の場合は)よくあるが、これを次のようにしてGoogle Deskbarから実行できるようになる。

Google Deskbarから「ipconfig /all」を実行

 メニューから[コマンドプロンプトで実行]を選べば、次のような表示内容のブラウザが表示される。

ブラウザで表示される「ipconfig /all」の実行結果

 このプラグインの全ソース・コード(C#)は次のようになっている(VB.NET版は下のリンクから参照できる)。

// deskbarcmd.cs

using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using Google.Desktop;

public class Utility {

  public static readonly Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");

  // 文字列をHTMLに整形
  public static string StringToHTML(string title, string body) {
    string template = @"
<html>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=SHIFT_JIS'>
    <title>{0}</title>
  </head>
  <body>
    <pre>
{1}
    </pre>
  </body>
</html>";

    return String.Format(template,
            title,
            System.Web.HttpUtility.HtmlEncode(body));
  }

  // cmd.exeを実行して実行結果を文字列(シフトJIS)で返す
  public static string CmdExec(string dir, string cmd) {

    // 指定されたコマンドを指定されたディレクトリで
    // cmd.exeにより実行
    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "cmd.exe";
    psi.Arguments = "/C " + cmd;
    psi.WorkingDirectory = dir;
    psi.UseShellExecute = false;
    psi.RedirectStandardOutput = true;
    psi.CreateNoWindow = true;
    Process p = Process.Start(psi);

    // 標準出力をシフトJISとして読み込む
    StreamReader sr
      = new StreamReader(p.StandardOutput.BaseStream, sjisEnc);
    string cmdout = sr.ReadToEnd().Replace("\r", "");
    sr.Close();

    return cmdout;
  }
}

public class DeskbarCmdExec : ICustomSearch {

  public string Title() {
    return "コマンドプロンプトで実行";
  }

  public OutputType GetOutputType() {
    return OutputType.kBrowser;
  }

  public string Run(string query, OutputType browser_type) {
    return CmdExecAndCreateFile(query);
  }

  // cmd.exeの実行結果を一時ファイルに書き込む
  string CmdExecAndCreateFile(string query) {
    string output = Utility.CmdExec(@"c:\", query);
    output = Utility.StringToHTML(query, output);

    string path = Path.Combine(Path.GetTempPath(), "CmdExec.html");

    StreamWriter sw
        = new StreamWriter(path, false, Utility.sjisEnc);
    sw.WriteLine(output);
    sw.Close();

    return path;
  }

  // テスト用のMainメソッド
  static void Main(string[] args) {
    DeskbarCmdExec dce = new DeskbarCmdExec();
    Process.Start(dce.CmdExecAndCreateFile(args[0]));
  }
}

// コンパイル方法:csc /t:library /r:deskbarex.dll deskbarcmd.cs
// コンパイル方法(テスト時):csc /r:deskbarex.dll deskbarcmd.cs
「コマンドプロンプトで実行」プラグインのC#のソース・コード(deskbarcmd.cs)

 ここではコードの詳細についての解説は割愛させていただくが、興味のある方は改造するなどして利用していただければ幸いである。

 また、SDKにはサンプル・プラグインとして、入力された数値の文字数のパスワードを生成するプラグインと、入力された文字列にマッチするメール・アドレスをWindowsのアドレス帳から検索してmini-viewerに表示するプラグインが含まれているので、プラグインを開発する際には参考になるだろう。

 すでにお気づきの方もおられるかもしれないが、現在のバージョンではプラグインを起動するためのショートカット・キーが設定できない。作成したプラグインを日常的に活用にするには、なくてはならない機能であると思われる。ドキュメントには将来のリリースではこの制限はなくなるとあるが、ぜひとも早く実装してほしい機能だ。また、日本語版のリリースも待たれるところである。End of Article

 

 INDEX
  .NET実践プログラミング
  .NETでカスタム・プラグインを開発できる「Google Deskbar」
    1.Google Deskbarの基本的な使い方
    2.Visual Studio .NETを利用したプラグインの開発
  3.コマンドプロンプトを実行するプラグイン
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間