2016-01-23 85 views
-1

我正在尋找如何通過Excel VBA來識別不同的圖標疊加。識別VBA中的圖標疊加

有一個雲同步軟件,我試圖確定何時我的excel文件同步已完成或仍在進行中。通過遵循一些meta(?)文件的修改日期,我能夠達到基本的可靠性水平,但沒有足夠的一致性來完全依賴此方法。

由於VBA中沒有太多關於它的信息,所以我的搜索結果是一張大牌。基本上我發現每個人都使用高級語言如C++來處理這些事情。

我在VBA得到的最接近源確實與System Tray類似的東西,並使用shell32.dll調用此時,相應windows apilink)。但我不知道如何製作到Shell Icon Overlay Identifier

你們認爲什麼,有沒有一種可能的方式使其通過VBA或我必須學會C++

+1

雲服務通常有Web API,允許您查詢他們的狀態等,這似乎是一種比疊加圖標更好的方法。 'SHGetFileInfo'可用於返回給定文件的覆蓋圖標的索引,您需要試驗一下,看看哪些索引與重啓之間的內容以及重啓之間的頻率有什麼關係,或許使用具有已知同步狀態的固定文件。 –

+0

覆蓋圖標是錯誤的方法。懷疑它甚至容易處理。使用API​​。 –

+0

我試圖在C++中調用API,通過一個例子的步驟,但內置的成功給了我錯誤。不幸的是,我沒有能力用我能處理的語言達到這個水平。感謝SHGetFileInfo提示!我會看看我能用它做什麼。 – Bernat

回答

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 

再次感謝您的提示!