【C#】Shell32.dllを利用してボタンにWindows標準イメージを設定する
おはようございます。
今回は、ボタンに Windows 標準の画像を表示してみたいと思います。
プログラムは特に流用せず新しいプロジェクトとしました。
スポンサーリンク
画面の作成
今回はシンプルにボタンのみの画面としました。
プログラムの記述
/// <summary> /// アイコン取得関数. /// </summary> /// <param name="file"></param> /// <param name="index"></param> /// <param name="largeIconHandle"></param> /// <param name="smallIconHandle"></param> /// <param name="icons"></param> /// <returns></returns> [DllImport("shell32.dll", EntryPoint = "ExtractIconEx", CharSet = CharSet.Auto)] public static extern int ExtractIconEx([MarshalAs(UnmanagedType.LPTStr)] string file, int index, out IntPtr largeIconHandle, out IntPtr smallIconHandle, int icons); /// <summary> /// アイコン破棄関数. /// </summary> /// <param name="hIcon"></param> /// <returns></returns> [DllImport("User32.dll")] private static extern bool DestroyIcon(IntPtr hIcon); /// <summary> /// 起動時の処理 /// </summary> public Form1() { InitializeComponent(); // ボタンイメージを設定 SetIconToButton(button0, 27); SetIconToButton(button1, 31); SetIconToButton(button2, 144); } /// <summary> /// ボタンにイメージをセットします. /// </summary> /// <param name="btn"></param> /// <param name="iconIndex"></param> public static void SetIconToButton(Button btn, int iconIndex) { string shell32Path = "C:\\Windows\\System32\\Shell32.dll"; Icon icon = GetIconImage(shell32Path, iconIndex, true); btn.Image = icon.ToBitmap(); btn.TextImageRelation = TextImageRelation.ImageAboveText; } /// <summary> /// アイコン画像を取得します. /// </summary> /// <param name="path"></param> /// <param name="iconIndex"></param> /// <param name="iconSize"></param> /// <returns></returns> public static Icon GetIconImage(string path, int iconIndex, inticonSize) { try { Icon[] icons = new Icon[2]; IntPtr largeIconHandle = IntPtr.Zero; IntPtr smallIconHandle = IntPtr.Zero; ExtractIconEx(path, iconIndex, out largeIconHandle, out smallIconHandle, 1); icons[0] = (Icon)Icon.FromHandle(largeIconHandle).Clone(); icons[1] = (Icon)Icon.FromHandle(smallIconHandle).Clone(); DestroyIcon(largeIconHandle); DestroyIcon(smallIconHandle); if (iconSize) { return icons[0]; } else { return icons[1]; } } catch (Exception) { } return null; }
起動してみる
イメージについては次の画像を参考にしてください。
左上から下に向かって 0 ~ インデックスが割り振られています。
まとめ
今回はちょっとサクッとでしたが、何かに使うこともあるかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません