如何使用 SHGetFileInfo 函式來取得 Visual Basic.NET 中的檔案相關聯的圖示

文章翻譯 文章翻譯
文章編號: 319340 - 檢視此文章適用的產品。
本文章的有 Microsoft Visual C#.NET] 版本請參閱 319350
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何使用 SHGetFileInfo 函式來取得與檔案相關聯的圖示。

建立 Windows Form 應用程式

  1. 啟動 Microsoft Visual Studio.NET。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 在 [新增專案] 對話方塊按一下 [專案類型 下的 [Visual Basic 專案],然後再按一下 [範本] 下方的 [Windows 應用程式
  4. 在 [名稱] 方塊中,輸入 GetIconSample

使用 SHGetFileInfo 函數

  1. 加入下列程式碼的 Form1.vb 檔案開頭
    Imports System.Runtime.InteropServices
    					
  2. Form1 類別中加入下列程式碼 INHERITS 陳述式之後
    Private Structure SHFILEINFO
            Public hIcon As IntPtr ' : icon
            Public iIcon As Integer ' : icondex
            Public dwAttributes As Integer ' : SFGAO_ flags
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
            Public szDisplayName As String
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
            Public szTypeName As String
    End Structure
    
    Private Declare Ansi Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, _
    ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, _
    ByVal uFlags As Integer) As IntPtr
    
    Private Const SHGFI_ICON = &H100
    Private Const SHGFI_SMALLICON = &H1
    Private Const SHGFI_LARGEICON = &H0         ' Large icon
    Private nIndex = 0
    					
  3. 清單檢視 控制項]、 [按鈕 控制項] 和 [未 imageList 控制項加入至表單。預設的名稱分別為 ListView1]、 [Button1],] 和 [ImageList1。
  4. Button1 的 [屬性] 視窗中設定按鈕文字為 選取檔案中,然後將下列程式碼加入 Button1_click 事件中:
    Dim hImgSmall As IntPtr  'The handle to the system image list.
    Dim hImgLarge As IntPtr  'The handle to the system image list.
    Dim fName As String      'The file name to get the icon from.
    Dim shinfo As SHFILEINFO
    shinfo = New SHFILEINFO()
    Dim openFileDialog1 As OpenFileDialog
    openFileDialog1 = New OpenFileDialog()
    
    openFileDialog1.InitialDirectory = "c:\temp\"
    openFileDialog1.Filter = "All files (*.*)|*.*"
    openFileDialog1.FilterIndex = 2
    openFileDialog1.RestoreDirectory = True
    
    listView1.SmallImageList = imageList1
    listView1.LargeImageList = ImageList1
    
    shinfo.szDisplayName = New String(Chr(0), 260)
    shinfo.szTypeName = New String(Chr(0), 80)
    
    If (openFileDialog1.ShowDialog() = DialogResult.OK) Then
         fName = openFileDialog1.FileName
    
         'Use this to get the small icon.
         hImgSmall = SHGetFileInfo(fName, 0, shinfo, Marshal.SizeOf(shinfo), _
             SHGFI_ICON Or SHGFI_SMALLICON)
    
         'Use this to get the large icon.
         'hImgLarge = SHGetFileInfo(fName, 0, 
         'ref shinfo, (uint)Marshal.SizeOf(shinfo), 
         'SHGFI_ICON | SHGFI_LARGEICON);
    
         'The icon is returned in the hIcon member of the shinfo struct.
         Dim myIcon As System.Drawing.Icon
         myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon)
    
         imageList1.Images.Add(myIcon) 'Add icon to imageList.
    
         listView1.Items.Add(fName, nIndex) 'Add file name and icon to listview.
         nIndex = nIndex + 1
    End If
    					

執行的專案

  1. 編譯專案: 在 [建置] 功能表上按一下 [建置方案]。
  2. 請按 F5 執行專案。
  3. 按一下 [選取一個檔案,然後選取 [開啟舊檔] 對話方塊中的 [檔案]。檔案和檔案相關聯的圖示的名稱出現在 清單檢視 控制項中。

?考

取得更多資訊在 Microsoft Visual C#.NET 版本的本文中按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
319350如何使用 SHGetFileInfo 函式來取得 Visual C#.NET 中的檔案相關聯的圖示

屬性

文章編號: 319340 - 上次校閱: 2004年7月6日 - 版次: 2.0
這篇文章中的資訊適用於:
  • 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
關鍵字:?
kbmt kbhowtomaster KB319340 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:319340
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com