识别VBA中的图标叠加层

时间:2016-01-23 13:35:39

标签: excel vba excel-vba winapi icons

我正在寻找如何通过Excel VBA识别不同的图标叠加层。

有一个云同步软件,我试图识别我的excel文件的同步完成或仍在进行中。通过遵循某些元(?)文件的修改日期,我能够达到基本的可靠性水平,但是没有足够的一致性来完全依赖这种方法。

我的搜索结果是一个很大的影响,因为在VBA中没有太多关于它的信息。基本上我发现每个人都使用C++之类的高级语言来处理这些事情。

VBA中最近的来源与System Tray类似,并使用shell32.dll调用适当的windows apilink )。但我不知道如何进入Shell Icon Overlay Identifier

你们有什么想法,是否有可能通过VBA或我必须学习C++

1 个答案:

答案 0 :(得分:3)

<强>真棒!有可能的! SHGetFileInfo 方法有效!

根据当前叠加层给出了值。以下是任何其他疯狂的人的代码:

Const SHGFI_ICON = &H100
Const SHGFI_OVERLAYINDEX = &H40
Const MAX_PATH = 260
Const SYNCED = 100664316    'own specific value
Const UNDSYNC = 117442532   'own specific value

Private Type SHFILEINFO
    hIcon As Long                       'icon
    iIcon As Long                       'icon index
    dwAttributes As Long                'SFGAO_ flags
    szDisplayName As String * MAX_PATH  'display name (or path)
    szTypeName As String * 80           '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 GetThatInfo()
    Dim FI As SHFILEINFO
    SHGetFileInfo "E:\Test.xlsm", 0, FI, Len(FI), SHGFI_ICON Or SHGFI_OVERLAYINDEX
    Select Case FI.iIcon
        Case SYNCED
            Debug.Print "Synchronized"
        Case UNDSYNC
            Debug.Print "Synchronization in progress"
        Case Else
            Debug.Print "Some shady stuff is going on!"
    End Select    
End Sub

再次感谢小费!