|
.NET TIPS UACの盾アイコンを取得するには?[C#、VB]デジタルアドバンテージ 一色 政彦2010/04/08 |
![]() |
|
|
|
「TIPS:ボタンにUACの盾アイコンを表示するには?」では、Windows 7/VistaなどのOSで権限の昇格が必要な処理を実行するボタンに、盾(シールド)アイコンを表示する方法を紹介した。
しかし、ボタン以外のコントロールなどでも、権限の昇格が必要となり、盾アイコンを表示したいという場合がある。そのような場合には、Windows OS(具体的には「C:\Windows\system32\imageres.dll」)から盾アイコンを取得して使用すればよい。本TIPSではその取得方法を紹介する。
●UACの盾アイコンをWindows OSから取得する方法
Windowsシステムが定義するシェル・アイコンを取得するには、Win32 APIのSHGetStockIconInfo関数を使用する(※Win32 APIの呼び出し方法は、「TIPS:Win32 APIやDLL関数を呼び出すには?」を参考にされたい)。SHGetStockIconInfo関数は、下記のような構文を持つ。
SHGetStockIconInfo関数
- 第1パラメータ(SHSTOCKICONID):SHSTOCKICONID列挙体の1つの値。盾アイコンのIDは「SIID_SHIELD」で、16進数値で「4D」。
- 第2パラメータ(UINT):1つ以上のフラグの組み合わせ。アイコンを意味するフラグは「SHGSI_ICON」で、16進数値で「100」。大きいアイコンを意味するフラグは「SHGSI_LARGEICON」で、16進数値で「0」(=つまりデフォルトでは大きいアイコンになる)。小さいアイコンを意味するフラグは「SHGSI_SMALLICON」で、16進数値で「1」。
- 第3パラメータ(SHSTOCKICONINFO):シェル・アイコンの情報を格納するためのSHSTOCKICONINFO構造体(後述)へのポインタ。
- 戻り値(HRESULT):成功時はS_OK(=0)を返す。それ以外はHRESULTエラー・コードを返す。
第3パラメータに指定するSHSTOCKICONINFO構造体のメンバは次のようになっている。
SHSTOCKICONINFO構造体
- 第1メンバ(DWORD):バイト単位での構造体サイズ。SHGetStockIconInfo関数を呼び出す前に設定する。
- 第2メンバ(HICON):アイコン・ハンドルを受け取る。
- 第3メンバ(DWORD):今回は使わない。SHGSI_SYSICONINDEXフラグを設定したときに、システム・アイコン・キャッシュ内画像のインデックス番号を受け取る。
- 第4メンバ(int):今回は使わない。SHGSI_ICONLOCATIONフラグを設定したときに、第5メンバで受け取るパスのリソース内画像のインデックス番号を受け取る。
- 第5メンバ(WCHAR):今回は使わない。SHGSI_ICONLOCATIONフラグを設定したときに、アイコンを含むリソースのパスを受け取る。
次のコードは、以上で説明したSHGetStockIconInfo関数を使って、盾アイコンの大きいサイズと小さいサイズを取得して、それぞれ別のPictureBoxコントロールに貼り付けるWindowsフォームのサンプル・アプリケーションである。
|
||
| UACの盾アイコンを取得して表示するサンプル・コード |
特に難しい部分はないので、コードの詳細に対する説明は割愛する。これを実行すると、次の画面のようになる。
| UACの盾アイコンを取得して表示した例 |
大きいアイコンは32×32のサイズ、小さいアイコンは16×16のサイズで取得できる。![]()
| カテゴリ:クラス・ライブラリ 処理対象:Windows環境 カテゴリ:クラス・ライブラリ 処理対象:UAC カテゴリ:クラス・ライブラリ 処理対象:Win32 API 使用ライブラリ:DllImport属性(System.Runtime.InteropServices名前空間) 使用ライブラリ:IntPtr構造体(System名前空間) 使用ライブラリ:Iconクラス(System.Drawing名前空間) 関連TIPS:Win32 APIやDLL関数を呼び出すには? 関連TIPS:ボタンにUACの盾アイコンを表示するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


