大概你需要 API SHGetFileInfo:
DWORD_PTR SHGetFileInfo(
    LPCTSTR pszPath,
    DWORD dwFileAttributes,
    SHFILEINFO *psfi,
    UINT cbFileInfo,
    UINT uFlags
);和结构:
typedef struct _SHFILEINFO{ 
    HICON hIcon; 
    int   iIcon; 
    DWORD dwAttributes; 
    TCHAR szDisplayName[MAX_PATH]; 
    TCHAR szTypeName[80]; 
} SHFILEINFO; 
你要把他们转换成 VB 的格式,详细用法参考 MSDN。

解决方案 »

  1.   

    edyang老兄,我来给你搽屁股吧,fuchao老弟。其实还可以用ExtractIcon().Const SHGFI_DISPLAYNAME = &H200
    Const SHGFI_TYPENAME = &H400
    Const MAX_PATH = 260
    Private Type SHFILEINFO
        hIcon As Long                      '  out: icon
        iIcon As Long          '  out: icon index
        dwAttributes As Long               '  out: SFGAO_ flags
        szDisplayName As String * MAX_PATH '  out: display name (or path)
        szTypeName As String * 80         '  out: type name
    End Type
    Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
    Private Sub Form_Paint()
        Dim FI As SHFILEINFO
        'Get file info
        SHGetFileInfo "c:\autoexec.bat", 0, FI, Len(FI), SHGFI_DISPLAYNAME Or SHGFI_TYPENAME
        Me.Cls
        Me.Print "Filename: Autoexec.bat"
        Me.Print "Typename: " + StripTerminator(FI.szTypeName)
        Me.Print "Displayname: " + StripTerminator(FI.szDisplayName)
    End Sub
    'This fucntion is used to strip al the unnecessary chr$(0)'s
    Function StripTerminator(sInput As String) As String
        Dim ZeroPos As Integer
        'Search the position of the first chr$(0)
        ZeroPos = InStr(1, sInput, vbNullChar)
        If ZeroPos > 0 Then
            StripTerminator = Left$(sInput, ZeroPos - 1)
        Else
            StripTerminator = sInput
        End If
    End Function