【C#】Shell32.dllを利用してボタンにWindows標準イメージを設定する
おはようございます。
今回は、ボタンに Windows 標準の画像を表示してみたいと思います。
プログラムは特に流用せず新しいプロジェクトとしました。
スポンサーリンク
画面の作成
今回はシンプルにボタンのみの画面としました。
プログラムの記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | /// <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)] publicstaticexternintExtractIconEx([MarshalAs(UnmanagedType.LPTStr)]stringfile,intindex,outIntPtr largeIconHandle,outIntPtr smallIconHandle,inticons); /// <summary> /// アイコン破棄関数. /// </summary> /// <param name="hIcon"></param> /// <returns></returns> [DllImport("User32.dll")] privatestaticexternboolDestroyIcon(IntPtr hIcon); /// <summary> /// 起動時の処理 /// </summary> publicForm1() { InitializeComponent(); // ボタンイメージを設定 SetIconToButton(button0,27); SetIconToButton(button1,31); SetIconToButton(button2,144); } /// <summary> /// ボタンにイメージをセットします. /// </summary> /// <param name="btn"></param> /// <param name="iconIndex"></param> publicstaticvoidSetIconToButton(Button btn,inticonIndex) { stringshell32Path="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> publicstaticIcon GetIconImage(stringpath,inticonIndex,inticonSize) { try { Icon[]icons=newIcon[2]; IntPtr largeIconHandle=IntPtr.Zero; IntPtr smallIconHandle=IntPtr.Zero; ExtractIconEx(path,iconIndex,outlargeIconHandle,outsmallIconHandle,1); icons[0]=(Icon)Icon.FromHandle(largeIconHandle).Clone(); icons[1]=(Icon)Icon.FromHandle(smallIconHandle).Clone(); DestroyIcon(largeIconHandle); DestroyIcon(smallIconHandle); if(iconSize) { returnicons[0]; } else { returnicons[1]; } } catch(Exception) { } returnnull; } |
起動してみる
イメージについては次の画像を参考にしてください。
左上から下に向かって 0 ~ インデックスが割り振られています。
まとめ
今回はちょっとサクッとでしたが、何かに使うこともあるかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません