C#のプログラムで自分自身をPin止めする(2)


前回の続き。
いろいろ調べていくとタスクバーアイコンのグループ化には「アプリケーションID(AppID)」が関係しているということがわかりました。


C#でアプリケーションIDを設定するにはWin7 API Code Packで使用可能なMicrosoft.WindowsAPICodePack.TaskbarクラスのTaskbarManager.Instance.ApplicationIdを設定する、具体的には、

using Microsoft.WindowsAPICodePack.Taskbar;

        const string APP_ID = "CompanyName.ProductName";
        TaskbarManager.Instance.ApplicationId = APP_ID;

をフォームの表示前に実行すればよいとのことですから、前回のPinned()メソッドと組み合わせるとこんな感じになるかと思います。

using System;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Taskbar;

        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // Win7以前では実行しても効果が無いので
            if (!MS.WindowsAPICodePack.Internal.CoreHelpers.RunningOnWin7) return;

            // AppID設定
            SetAppId(APP_ID);
 
            // コマンドラインオプション解析(/pinnedオプションでPin止め)
            if (args.Length > 0)
            {
                switch (args[0])
                {
                    case "/pinned":
                        Pinned(Application.ExecutablePath, true);
                        break;
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        public const string APP_ID = "Sample.SelfPinned";

        /// <summary>
        /// アプリケーションIDの設定
        /// </summary>
        /// <param name="appId">アプリケーションID</param>
        public static void SetAppId(string appId)
        {
            TaskbarManager.Instance.ApplicationId = APP_ID;
        }

        public static void Pinned(string filePath, bool pinTaskbar)
        {
             //(前回と同じなので省略)
        }


ところが、これでも依然としてPin止めしたタスクバーアイコンと実行中のアプリケーションのアイコンは分裂してしまいます。
さらに調べると、Pin止めしたタスクバーアイコンはTaskbarManager.Instance.ApplicationIdの設定とは無関係で、別なルールが適応されるということが判明しました。
ではいったいどうすればいいのでしょうか?それはまた次回に。