我正在寻找如何通过Excel VBA
识别不同的图标叠加层。
有一个云同步软件,我试图识别我的excel文件的同步完成或仍在进行中。通过遵循某些元(?)文件的修改日期,我能够达到基本的可靠性水平,但是没有足够的一致性来完全依赖这种方法。
我的搜索结果是一个很大的影响,因为在VBA
中没有太多关于它的信息。基本上我发现每个人都使用C++
之类的高级语言来处理这些事情。
我VBA
中最近的来源与System Tray
类似,并使用shell32.dll
调用适当的windows api
(link )。但我不知道如何进入Shell Icon Overlay Identifier
。
你们有什么想法,是否有可能通过VBA
或我必须学习C++
?
答案 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
再次感谢小费!