アプリケーションに関連づけられたアイコンを取得する 最終更新日 2003年8月7日 0:00 API関数ExtractAssociatedIconを使用してアイコンハンドルを取得し、そこからIconオブジェクトを作成する。 ただ、この方法ではアルファチャンネルを含むアイコンは正しく取得できない(アルファ値を持つ部分が透過せず黒くなる)。 なお、.NET Framework 2.0以降ではIcon.ExtractAssociatedIconメソッドを用いることでファイル名から直接Iconオブジェクトを取得できるようになっている。 C# VB 別ウィンドウで開く すべて選択してコピー ダウンロード 行番号を表示する using System.Drawing; using System.Reflection; using System.Runtime.InteropServices; public class Form1 : System.Windows.Forms.Form { // アプリケーションに関連づけられたアイコンを取得するためのAPI関数 [DllImport( "shell32.dll", EntryPoint = "ExtractAssociatedIcon" )] private extern static IntPtr ExtractAssociatedIcon ( IntPtr hInst, [MarshalAs(UnmanagedType.LPStr)] string lpIconPath, ref int lpiIcon ); Icon ico; private void Form1_Load( object sender, System.EventArgs e ) { string iconPath = "E:\\Test.exe"; IntPtr hInst = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly().GetModules()[0] ); Int32 iIcon = 0; IntPtr hIcon; // ファイルに関連付けられたアイコンのハンドルを取得する hIcon = ExtractAssociatedIcon( hInst, iconPath, ref iIcon ); // アイコンハンドルからIconオブジェクトを作成する ico = Icon.FromHandle( hIcon ); } private void Form1_Paint( object sender, System.Windows.Forms.PaintEventArgs e ) { e.Graphics.DrawIcon( ico, 0, 0 ); } } 別ウィンドウで開く すべて選択してコピー ダウンロード 行番号を表示する Imports System.Drawing Imports System.Reflection Imports System.Runtime.InteropServices Public Class Form1 Inherits System.Windows.Forms.Form ' アプリケーションに関連づけられたアイコンを取得するためのAPI関数 <DllImport("shell32.dll", EntryPoint:="ExtractAssociatedIcon")> _ Private Shared Function ExtractAssociatedIcon _ ( _ ByVal hInst As System.IntPtr, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpIconPath As String, _ ByRef lpiIcon As Integer _ ) _ As System.IntPtr End Function Dim ico As Icon Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim iconPath As String = "E:\Test.exe" Dim hInst As IntPtr = Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly().GetModules()(0)) Dim iIcon As Int32 Dim hIcon As IntPtr ' ファイルに関連付けられたアイコンのハンドルを取得する hIcon = ExtractAssociatedIcon(hInst, iconPath, iIcon) ' アイコンハンドルからIconオブジェクトを作成する ico = Icon.FromHandle(hIcon) End Sub Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Graphics.DrawIcon(ico, 0, 0) End Sub End Class