tag:crieit.net,2005:https://crieit.net/tags/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BB%98%E3%83%9C%E3%82%BF%E3%83%B3/feed 「イメージ付ボタン」の記事 - Crieit Crieitでタグ「イメージ付ボタン」に投稿された最近の記事 2019-08-21T10:15:50+09:00 https://crieit.net/tags/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BB%98%E3%83%9C%E3%82%BF%E3%83%B3/feed tag:crieit.net,2005:PublicArticle/15340 2019-08-21T10:15:50+09:00 2019-08-21T10:15:50+09:00 https://crieit.net/posts/C-Shell32-dll 【C#】ボタンにShell32.dllのイメージを設定する <p>今回は、ボタンに Windows 標準の画像を表示してみたいと思います。<br /> プログラムは特に流用せず新しいプロジェクトとしました。</p> <h2 id="画面の作成"><a href="#%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BD%9C%E6%88%90">画面の作成</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage000.jpg" alt="画面の作成" /></p> <p>今回はシンプルにボタンのみの画面としました。</p> <h2 id="プログラムの記述"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E8%A8%98%E8%BF%B0">プログラムの記述</a></h2> <pre><code> /// <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; } </code></pre> <p> </p> <h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage001.jpg" alt="起動した画面" /></p> <p>イメージについては次の画像を参考にしてください。</p> <p><img src="https://www.doraxdora.com/wp-content/uploads/2018/02/CSharpButtonImage002.jpg" alt="画像インデックス" /></p> <p>左上から下に向かって 0 ~ インデックスが割り振られています。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回はちょっとサクッとでしたが、何かに使うこともあるかと思います。</p> <p>ではでは。</p> <p> </p> doraxdora