我需要获取当前正在运行的应用程序列表,以便我的C++应用程序能够成为焦点.
有人这样做过吗?
没有真正的跨平台方式.流程,应用程序等的整个概念是特定于操作系统的概念.如果您使用某个库来解决问题,那么您实际上并不是跨平台的,只限于此库支持的平台.例如,Qt不是通用的跨平台,它运行在很多平台上,但不是在每个已知的平台上,在不能运行的平台上,Qt解决方案将无法运行.大多数类似UNIX的平台都支持POSIX API(更多,更少),如果您将自己局限于POSIX函数,该解决方案将适用于Linux,BSD,Mac OS X,Solaris和类似的操作系统.但它不适用于Windows.微软决定放弃POSIX支持(并不是说他们的POSIX支持很棒),但Cygwin为Windows带来了POSIX支持(Cygwin在Windows上模拟完整的Linux glibc API).问题是POSIX实际上并没有真正提供一组函数来解决你的问题 - 例如,与BSD系统相比,像Linux这样的POSIX工具获取进程信息的方式与Linux系统完全不同.
第二个问题是你在谈论"焦点".焦点不适用于应用程序.没有UI且没有窗口的后台应用程序不能具有"焦点"."聚焦"对于这样的应用程序意味着什么?因此,您对正在运行的应用程序列表并不感兴趣,但是在运行的UI应用程序列表中,这些应用程序具有窗口并且其窗口可能会得到关注.完全不同的事情.Windows系统在不同平台之间更加不同,POSIX完全忽略了UI.
你的问题上也有一个Visual-C++标签,所以你的代码必须如何跨平台,因为Visual-C++只是一个Windows,不是吗?您真正想要支持哪些平台(请相应地更新您的问题),因为我怀疑除了为每个支持的平台编写不同的代码之外,还有更好的解决方案.