是否有一种跨平台的方式来获取正在运行的应用程序列表?

时间:2009-02-26 10:46:39

标签: c++ qt cross-platform

我需要获取当前正在运行的应用程序列表,以便我的C ++应用程序能够成为焦点。

有人这样做过吗?

2 个答案:

答案 0 :(得分:7)

没有真正的跨平台方式。流程,应用程序等的整个概念是特定于操作系统的概念。如果您使用某个库来解决问题,那么您实际上并不是跨平台的,只限于此库支持的平台。例如。 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,不是吗?您真正想要支持哪些平台(请相应地更新您的问题),因为我怀疑除了为每个支持的平台编写不同的代码之外,还有更好的解决方案。

答案 1 :(得分:1)

首先:应用程序没有焦点;窗户做。其次:有些窗户不接受焦点。所以,我认为这不可能。