Visual C# .NET で SHGetFileInfo 関数を使用してファイルに関連付けられたアイコンを取得する方法

この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
この資料では、SHGetFileInfo 関数を使用して、ファイルに関連付けられたアイコンを取得する方法について手順を追って説明します。

先頭に戻る

Windows フォーム アプリケーションを作成する

  1. Microsoft Visual Studio .NET を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] ボックスの一覧の [Visual C# プロジェクト] をクリックし、[テンプレート] ボックスの一覧の [Windows アプリケーション] をクリックします。
  4. [名前] ボックスに GetIconSample と入力します。
先頭に戻る

SHGetFileInfo 関数を使用する

  1. Form1.cs ファイルの USING ステートメントの末尾に次のコードを追加します。
    using System.Runtime.InteropServices;					
  2. GetIconSample 名前空間の Form1 クラスの後に次のコードを追加します。
    [StructLayout(LayoutKind.Sequential)]public struct SHFILEINFO {	public IntPtr hIcon;	public IntPtr iIcon;	public uint dwAttributes;	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]	public string szDisplayName;	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]	public string szTypeName;};class Win32{	public const uint SHGFI_ICON = 0x100;	public const uint SHGFI_LARGEICON = 0x0; // 'Large icon	public const uint SHGFI_SMALLICON = 0x1; // 'Small icon			[DllImport("shell32.dll")]	public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);}					
  3. Form1 クラスの PRIVATE ステートメントの後に次のコードを追加します。
    private int nIndex = 0;					
  4. フォームに ListView コントロール、Button コントロール、および ImageList コントロールを追加します。各コントロールのデフォルトの名前は、listView1、button1、および imageList1 です。
  5. button1 のプロパティ ウィンドウで、ボタン テキストを Select a File に設定し、button1_click イベントに次のコードを追加します。
    IntPtr hImgSmall; //the handle to the system image listIntPtr hImgLarge; //the handle to the system image liststring fName; //  'the file name to get icon fromSHFILEINFO shinfo = new SHFILEINFO();   OpenFileDialog openFileDialog1 = new OpenFileDialog();openFileDialog1.InitialDirectory = "c:\\temp\\";openFileDialog1.Filter = "All files (*.*)|*.*";openFileDialog1.FilterIndex = 2;openFileDialog1.RestoreDirectory = true ;listView1.SmallImageList = imageList1;listView1.LargeImageList = imageList1;			if(openFileDialog1.ShowDialog() == DialogResult.OK) {     fName = openFileDialog1.FileName;     //Use this to get the small Icon     hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo,(uint)Marshal.SizeOf(shinfo),Win32.SHGFI_ICON |Win32.SHGFI_SMALLICON);    //Use this to get the large Icon    //hImgLarge = SHGetFileInfo(fName, 0,     //	ref shinfo, (uint)Marshal.SizeOf(shinfo),     //	Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);    //The icon is returned in the hIcon member of the shinfo struct    System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);				    imageList1.Images.Add(myIcon);				    //Add file name and icon to listview    listView1.Items.Add(fName, nIndex++); }					
先頭に戻る

プロジェクトを実行する

  1. [ビルド] メニューの [ソリューションのビルド] をクリックして、プロジェクトをコンパイルします。
  2. F5 キーを押してプロジェクトを実行します。
  3. [Select a File] をクリックし、[ファイルを開く] ダイアログ ボックスでファイルを選択します。ListView コントロールに、ファイルの名前と、ファイルに関連付けられたアイコンが表示されます。
先頭に戻る
関連情報
この資料の Microsoft Visual Basic .NET 版の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
319340 Visual Basic .NET で SHGetFileInfo 関数を使用してファイルに関連付けられたアイコンを取得する方法
先頭に戻る
プロパティ

文書番号:319350 - 最終更新日: 12/07/2015 09:15:51 - リビジョン: 2.2

Microsoft Visual Studio .NET 2003 Professional Edition, Microsoft Visual Studio .NET 2003 Enterprise Architect, Microsoft Visual Studio .NET 2003 Enterprise Developer, Microsoft Visual Studio .NET 2003 Academic Edition, Microsoft Visual Studio .NET 2002 Professional Edition, Microsoft Visual Studio .NET 2002 Enterprise Architect, Microsoft Visual Studio .NET 2002 Enterprise Developer, Microsoft Visual Studio .NET 2002 Academic Edition

  • kbnosurvey kbarchive kbhowtomaster KB319350
フィードバック