我想從任何應用程序的跳轉列表中找出最近/頻繁的項目。我知道我們可以使用IApplicationDocumentLists接口來做到這一點。但是我們需要appUserModelId。所以現在我的問題是找出appUserModelId任何應用程序,給定其exe路徑。任何幫助將不勝感激。如何使用vC++在Windows 7/8中獲取appUserModelId
回答
AppUserModeIDs不是EXE文件本身的一部分,因此僅具有EXE文件的路徑是不夠的。 AppEserModeID在EXE運行時分配,並且可以在整個進程或每個窗口的基礎上分配。
要查詢過程的明確 AppUserModeID,你就必須將代碼注入到該進程,並調用它GetCurrentProcessExplicitAppUserModelID()
,然後使用IPC機制將值發送回你的主應用程序。
要查詢窗口的明確 AppUserModeID,您可以使用SHGetPropertyStoreForWindow()
得到窗口的IPropertyStore
接口,然後調用IPropertyStore.GetValue()
指定PKEY_AppUserModel_ID
的屬性鍵。
請注意,在這兩種情況下,這些功能僅適用於明確的 AppUserModeID。它們不適用於隱式如果應用程序未爲其自身分配明確的AppUserModeID,則由Windows分配的AppUserModeID。這是在文檔中明確提出:
Application User Model IDs (AppUserModelIDs)
一些應用程序不聲明明確AppUserModelID。它們是可選的。 在這種情況下,系統使用一系列啓發法來分配內部AppUserModelID。但是,避免這些計算會帶來性能優勢,並且明確的AppUserModelID是保證精確用戶體驗的唯一方法。因此,強烈建議設置一個明確的ID。 應用程序無法檢索系統分配的AppUserModelID。
更新:在Windows 8中,微軟增加了一個新的GetApplicationUserModelId()
功能:
獲取application user model ID指定進程。
您可以使用它代替注入代碼來調用GetCurrentProcessExplicitAppUserModelID()
。我還沒有嘗試過,但我懷疑它會返回當前的AppUserModeID,無論它如何分配(顯式或系統分配)。
您無法從Exe路徑獲取AppUserModelId。這不可能。
但是你可以看我的帖子如何枚舉所有已安裝的StoreApps的所有AppUserModelId對當前用戶:How to enumerate the installed StoreApps and their ID in Windows 8 and 10
- 1. 如何在vC++中獲取windows時間?
- 2. 如何在Windows中使用chrome自動刷新使用VC++
- 3. Windows VC++獲取機器型號名稱
- 4. 如何在VC++中獲取WPF應用程序的截圖?
- 5. 如何在Windows 8中獲得Microsoft vC++運行時包?
- 6. 如何使用vC++捕獲桌面
- 7. windows vC++如何使用UniversalCRT_IncludePath以及如何使它在cl.exe中工作
- 8. Ramdom 78 X 78個像素
- 9. 如何在CMake中使用VC++模塊
- 10. 如何在VC++ 6.0中使用C#usercontrol?
- 11. 如何在VC++中使用_W64和__w64?
- 12. 如何在vC++中使用c#dll?
- 13. 如何使用vC++獲取證書序列號
- 14. 獲取windows XP,windows 7當前登錄VC中的用戶名稱
- 15. 如何使用Node.js獲取Windows版本?
- 16. 在VC++中獲取#define符號列表
- 17. 在VC++中獲取$(ProjectDir)的目錄
- 18. 在VC++中獲取不同的VARIANT值
- 19. 如何在VC++
- 20. 如何獲取MFC中的應用程序當前路徑(VC++)?
- 21. 如何在VC++中獲取函數的實際地址
- 22. 如何在VC++中獲取設備顯示名稱?
- 23. 使用C++在Windows中獲取時區
- 24. 如何使用C++在Windows中獲取硬件信息?
- 25. 如何在Windows中使用C獲取文件夾大小?
- 26. 如何在Windows gitbash中使用bundle exec rake test獲取顏色
- 27. 如何在Windows中獲取文件名?
- 28. 如何調試在VS2008中用VC++編寫的Windows服務?
- 29. 如何使用VC++ 2010
- 30. 如何使用VC++ 2005
感謝您的輸入。那麼沒有其他方法可以獲得任何應用程序的跳轉列表嗎?因爲我試圖獲取appUserModelId,然後jumpList IPropertyStore的方式,但我無法得到,因爲大多數這些應用程序沒有定義明確的userModelId。所以這種方法不適合我。我想要獲得任何應用程序的跳轉列表。 – Shashank
如果沒有AppUserModeID,沒有辦法獲得跳轉列表,並且沒有辦法獲得由Windows隱式創建的AppUserModeID(除非您反向工程Windows來找出它用於創建其隱式AppUserModeID的啓發式算法) 。 –
非常感謝您的意見。這真的很有幫助 – Shashank