0

別のプロセス B.exe をブートストラップし、動的なコマンド ライン引数を B.exe に渡すプログラム A.exe があります。デフォルトの Windows 7 タスクバー タスク リストには、B.exe の別のインスタンスを開始するオプションが一番上のオプションとして表示されます。例: http://cl.ly/image/2C1X2g1A2K0k top オプションは、コマンド ウィンドウの別のインスタンスを開きます。

私が望むのは、このデフォルトのタスク リストを Win32/Shell API 経由でカスタマイズして、一番上のオプションが実際に B.exe ではなく A.exe を開くようにすることです。これは可能ですか?これは、アプリケーションが「固定」されている場合にも当てはまります。ピン留めされたボタンは A.exe を指し、ロードする必要があります。B.exe は、A.exe によって決定される動的なコマンド ライン パラメータを必要とするため、これは必須です。B.exe は A.exe を認識しません。

これが不可能な場合、この機能を得るために使用できる他の回避策 (シェル リンク、ショートカットなど) はありますか? または、そのタスク リストを完全に無効にする方法はありますか?

前もって感謝します。この質問が明確でない場合はお知らせください。説明を更新します。

4

1 に答える 1

0

この問題の適切な解決策は、MSDN ページ で説明されているようにSTARTF_TITLEISLINKNAME、フラグと組み合わせてショートカット (.lnk) ファイルを使用することでした。Windows は、アプリケーションの新しいインスタンス (タスク リストの一番上のエントリ) を開始するためのタスク バー タスク アイテムとして、またアプリケーションがタスク バーにピン留めされている場合に、ショートカットを使用します。

たとえば、B.lnk が B.exe を指していると仮定すると、A.exe に次のように入力できます。

PROCESS_INFORMATION piProcInfo;
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));

STARTUPINFO siStartInfo;
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpTitle = (LPTSTR)L"C:\Path\to\B.lnk";
siStartInfo.dwFlags = STARTF_TITLEISLINKNAME;

CreateProcess(NULL,
              (LPTSTR)L"C:\Path\to\B.exe",
              NULL,
              NULL,
              TRUE,
              CREATE_NO_WINDOW,
              NULL,
              NULL,
              &siStartInfo,
              &piProcInfo);

同様のニッチなユースケースを持つ誰かに役立つことを願っています.

于 2013-01-09T22:01:35.647 に答える