SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

API Code PackとVisual Studio 2008でWindows 7のジャンプリストを作成する

Windowsの簡素化されたミニバージョンの[スタート]メニューを実装

  • X ポスト
  • このエントリーをはてなブックマークに追加

独自アプリケーションのコマンドの呼び出し

 ジャンプリストから外部アプリケーションを起動することは簡単ですが、ジャンプリストを使って独自アプリケーションのコマンドを呼び出したい場合はあまり役に立ちません。現在のところ、ジャンプリストのコマンドはディスク上のファイル、つまりハンドラアプリケーションが登録されたドキュメントファイル、またはオプションのコマンドラインパラメータが指定された実行可能ファイルを参照している必要があります。

 つまり技術的に言うと、現在実行中のアプリケーションインスタンスにコマンドを実行させるには、ジャンプリストを表示するアプリケーションインスタンス(「サーバ」)と、ジャンプリストからコマンドが選択されたときにWindowsが起動するアプリケーションインスタンス(「クライアント」)の間に何らかのプロセス間通信(IPC)を実装する必要があるということです。

 例えば、アプリケーションに2つのカスタムコマンドを実装する必要があるとします。話を単純にするために、コマンドの名前をCommand AおよびCommand Bとします。これらのコマンドに対応するジャンプリストのタスクを作成するには、実行可能ファイルへのフルパスを作成し、さらにどのコマンドが実際に選択されたかをアプリケーションに通知するコマンドラインパラメータを後ろに追加する必要があります。例えば、パスはC:\MyApps\Win7JumpListDemo.exeのようになります。

 このパスを使ってWindowsは実行可能ファイルを起動し、指定されたパラメータを渡します。アプリケーションはコマンドラインパラメータが存在するかどうかをチェックし、正しいパラメータが指定されている場合は、既に実行中のインスタンスにパラメータを通知して直ちに終了します。

 最初に、独自アプリケーションのコマンドを呼び出すジャンプリストのタスクを作成する方法を見てみましょう。このコードは以前に示したコードと似ています。

JumpList list = JumpList.CreateJumpList();
...
string selfPath = System.Environment.CommandLine;
// the value comes with quotation marks, strip them out
selfPath = selfPath.Substring(1, selfPath.Length - 3);

JumpListLink selfCommandATask = new JumpListLink(
      selfPath, "Command A");
selfCommandATask.Arguments = "Command-A";
selfCommandATask.IconReference = new IconReference(
      selfPath, 0);

JumpListLink selfCommandBTask = new JumpListLink(
      selfPath, "Command B");
selfCommandBTask.Arguments = "Command-B";
selfCommandBTask.IconReference = new IconReference(
      selfPath, 0);

JumpListSeparator separator = new JumpListSeparator();
list.AddUserTasks(notepadTask, calculatorTask,
      separator, selfCommandATask, selfCommandBTask);

 これらのタスクを追加すると、ジャンプリストは図6のように表示されます。アプリケーションインスタンスへのパスはSystem.Environment.CommandLineプロパティから読み込まれますが、このパスは引用符で囲まれています。ジャンプリストのタスクが正しく処理されるように、引用符を削除する必要があります。そうしないと、アプリケーションが起動するときにエラーが表示されます。

図6 アプリケーションのジャンプリストにカスタムタスクが追加されている
図6 アプリケーションのジャンプリストにカスタムタスクが追加されている

 もう1つの重要な部分は、Argumentsプロパティを使ってコマンドラインパラメータを指定することです。本稿の執筆時点では、Windows API Code PackのドキュメントファイルにはArgumentsプロパティに関する記述がまったくありません。それでも、コードからこのプロパティを利用することは可能です。

 ユーザーがアプリケーションのジャンプリストから[Command A]を選択すると、Windowsは次のコマンドを(もちろん実際のランタイムパスを使って)実行します。

C:\MyApps\Win7JumpListDemo.exe Command-A

 アプリケーションの起動時に、パラメータをチェックする何らかのコードがProgram.csファイルに必要となります。サンプルアプリケーションでは、アプリケーションのmainメソッドが次のようになっています。

static void Main(string[] args)
{
  if (CommandLineParameters.ParametersGiven(args))
  {
      CommandLineParameters.ProcessCommandLine(args);
  }
  else
  {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.ApplicationExit +=
      (obj, evt) =>
      {
          PipeCommunications.SignalCloseEvent();
      };
    Application.Run(new MainForm());
  }
}

 CommandLineParametersという名前のカスタムクラスを使って、コマンドラインパラメータがあるかどうかをチェックしています。パラメータがある場合は、同じクラスでパラメータを処理します。パラメータがない場合は、アプリケーションが普通に起動して、ユーザーインターフェースが表示されます。

次のページ
パイプを使った通信

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Jani Jarvinen(Jani Jarvinen)

フィンランドのソフトウェア開発トレーナー兼コンサルタント。Microsoft C# MVPの受賞者で、投稿も多数。ソフトウェア開発に関する著書も3冊出版している。ITpro.fiというフィンランドのソフトウェア開発エキスパートグループのグループリーダー。ブログのアドレスはhttp://www.saunalahti.fi/janij/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4826 2010/02/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング