我想从任何应用程序的跳转列表中找出最近/频繁的项目。我知道我们可以使用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