【问题标题】:Identify icon overlay in VBA识别 VBA 中的图标覆盖
【发布时间】:2016-01-23 13:35:38
【问题描述】:

我正在寻找如何通过Excel VBA 识别不同的图标覆盖。

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

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

我在VBA 中找到的最接近的来源与System Tray 执行类似的操作,并使用shell32.dll 调用适当的windows api (link)。但是我不知道怎么去Shell Icon Overlay Identifier

你们怎么看,有没有办法通过VBA或者我必须学习C++

【问题讨论】:

  • 云服务通常具有 Web API,允许您查询它们的状态等。这似乎比乱用覆盖图标更好的方法。 SHGetFileInfo 可用于返回给定文件的覆盖图标的索引,您需要尝试查看哪些索引与重新启动之间的内容和恒定程度相关,可能使用具有已知同步状态的固定文件。
  • 覆盖图标是错误的方法。怀疑它甚至是易处理的。使用 API。
  • 我尝试在 C++ 中使用 API,通过示例完成这些步骤,但构建不成功给了我错误。不幸的是,我没有能力用我可以处理的语言达到那个水平。感谢SHGetFileInfo 提示!我会看看我能用它做什么。
  • 到底谁会否决这样的问题,为什么?疯了……
  • 使用 VBA 这是一种合法的方法,因为它正在工作,这就是问题的重点,让它发挥作用。也许这不是最佳解决方案。使用云 SDK 的具有 C++ 接口的 SQL 数据库会更好。另外,我可以根据自己的需要设置自己的超级安全网络服务器来处理同步。不幸的是,所有这些至少要花我一年的时间。这个 VBA 解决方案让我得到了我在问题中寻找的东西,这正是我想要的。当您甚至没有足够的钱购买汽油时,您就不会尝试购买跑车。

标签: vba excel winapi icons


【解决方案1】:

太棒了!有可能的! 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

再次感谢您的提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多