2012-03-15 10 views
17

アプリケーションがありますので、MyAppとしましょう。インストール時にMyAppのデスクトップアイコンを作成します。これは基本的にはMyLauncher.exe /launch MyApp.exeです。 MyLauncherはいくつかの便利なことを行い(更新をチェックするなど)、MyAppを起動します。私のアプリケーションとWindows 7のタスクバーの固定プログラムを関連付けるにはどうすればよいですか?

MyApp on the Desktop

のWindows 7を持つユーザーが( "タスクバーにピン" デスクトップアイコン上すなわち、マウスの右ボタン、)タスクバーにそれを固定することができます:

MyApp on the Taskbar

ただし、ショートカットがMyLauncherを指しているため、ユーザーがアプリケーションを起動すると(デスクトップアイコンまたはタスクバーアイコンのいずれか)、MyLauncherはその処理を行い、その後はMyAppを起動します。次のようにタスクバーで、結果は次のとおりです。

MyApp twice on the Taskbar

これがなぜ起こるか私は理解しています。 MyLauncherはMyAppを起動するので、Windows 7のタスクバーは2つの異なるアプリケーションとして認識します。

明らかに、私の質問は:MyLauncherとMyAppの開発者として、これについて何かできますか?私は、Windows 7のタスクバーがMyApp.exeのすべてのインスタンスをMyLauncher.exe /lauch MyApp.exeというショートカットに「関連付ける」ようにしたいと思います。

+0

場合にのみ、MyApp.exeは実際に 'msaccess .exe MyVbaProject.mdb'、つまりVBAタグ。 VBAアプリケーションは、(私たち自身の).netライブラリを大量に使用するため、c#と.netタグを使用します。これらの言語のいずれかのソリューションは問題ありません。 Windows API呼び出しもうまくいきます。 – Heinzi

+1

[Microsoft®.NET Framework用Windows®APIコードパック](http://archive.msdn.microsoft.com/WindowsAPICodePack)および[コードプロジェクト:Windows 7/VS2010デモアプリケーション](http://www.codeproject .com/Articles/44393/Windows-7-VS2010-demo-app) – LarsTech

+0

これはhttp:// stackoverflowに役立つかもしれません。com/questions/3648386/wpf-app-has-no-pin-to-taskbar-option – yuben

答えて

0

あなたができることの1つは、アプリケーションのタスクバーアイコンをまったく表示しないことです。 WPFでは、プロパティの設定と同じくらい簡単です:

ShowInTaskbar="False"

このアプローチの問題は、ユーザがもはやアプリケーションが実行されたときに教えてくれないか、簡単際に最前線にそれをもたらすことができるので、それは利便性を減らすことになるということですそれは他のウィンドウの後ろに失われます。これらの問題の一部を軽減するために、このアプリケーションの通知アイコンを作成して、これらの機能の一部を有効にし、アプリケーションの現在の状態に関するフィードバックをユーザーに与えることもできます。 (実行中、実行中など)

This msdn resourceには、Windowsフォームで通知アイコンを作成する方法に関する良いコードサンプルがあります。 WPFアプリケーションでも同じ方法を使用できます。

enter image description here

SMALL TIP:通知アイコンは16×16ピクセルです。サイズを変更する前にアイコンのベクターバージョンを見つけようとすると、そのサイズで多くのディテールを失う傾向があるため、結果が鮮明になります。

通知アイコンを持つ一部のユーザーインタラクションを含めることができます。

  • をダブルクリック>フロント
  • 右クリック>への適用は、いくつかの選択肢を持つコンテキストメニューが表示されますもたらします。 (I.E.前面に近づける、閉じるなど)
  • マウスオーバー>アプリケーションに関する情報を含むツールチップを表示します。
3

詳細はこちらを参照してください 「アプリケーションIDが」遊んで試してみてください: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

「アプリケーションユーザモデルのID(AppUserModelIDs)を関連付けるには、Windows 7以降のシステムでは、タスクバーで広く使用されていますプロセス、ファイル、および特定のアプリケーションのウィンドウを含むことがありますが、場合によっては、システムによってプロセスに割り当てられた内部AppUserModelIDを使用するだけで十分です。ただし、複数のプロセスを所有するアプリケーションまたはホスト単一のタスクバーボタンの下にそれ以外の異なるウィンドウをグループ化できるように、プロセス自体を明示的に識別する必要があります。そのアプリケーションのジャンプリストの内容を制御してください。

+1

あなたが.NETプロセスの場合、Windows APIコードパックが役に立ちます。 –

0

1)
これは建築の質問/問題の詳細ですが - それは、このような目的のために奇抜なデザインのビットは、だ
すなわちもしアップデータ(私は推測しているあなたがその/ wを開始することが、より多くを持っています)アプリ内で通常チェックされている必要があります - 更新があるとみなされた場合は、外部プロセスを開始してアプリなどを更新します。
ランチャーは(説明したように)多くの異なるものを起動している場合や、より複雑なケース - 例えばあなたはdll-sやサービスなどをロードする「ホストプロセス」を持っています。
基本的には、不幸なデザイン、決定のために問題にぶち当たっています。あなたはまだ「トリック」ランチャーを行うことができ

しかし、あなたは、あなたが再設計したくなかったと言った...
2) - と周りの簡単な作業のようなものを作る...

  • 起動時に 'MyApp -argument:check'を最初に起動します(起動時ではなくデスクトップにアイコンがあります)。起動時に 'fork'という引数があり、 'check'に小さな 'shim'コードを実行すると'MyLauncher'
  • ランチャーを起動すると、起動した後にメインMyAppを閉じることもできます。
  • w鶏ランチャーが完了したら、MyAppを再度起動します(更新が必要な場合のみ残しておくと複雑ですが、前の方が簡単です)。他の引数を使用するか、何も使用しないでください。)、
  • あなたは、いくつかのプロセスに並べ替えの二重のリダイレクトをやっている -
  • 、再びアプリ=>ランチャー=>アプリを起動し、あなたがすべきすべてこれで
  • 、アイコンに問題をこのように持つべきではありません「管理者」モードが必要な場合はどちらのアプリ(ほとんどの場合、更新が必要なランチャー、より多くのアクセス許可)に適切なマニフェストを提供することに注意してください。

それはトリックを行うかもしれないが、試していないが、私はなぜそれがすべきではないかわからない - そしてあなたは、既存のアーキテクチャを維持することができるなど

関連する問題