// 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 = @" {0}
{1}
		
"; 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