【问题标题】:Is there a cross-platform way of getting a list of running applications?是否有一种跨平台的方式来获取正在运行的应用程序列表?
【发布时间】:2009-02-26 10:46:39
【问题描述】:

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

有人做过吗?

【问题讨论】:

    标签: c++ qt cross-platform


    【解决方案1】:

    没有真正的跨平台方式可以做到这一点。进程、应用程序等的整个概念是操作系统特定的概念。如果您使用某个库来解决问题,那么您并不是真正的跨平台,您仅限于该库支持的平台。例如。 Qt 不是通用的跨平台,它可以在很多平台上运行,但不是在每个已知的平台上运行,并且在无法运行的平台上,Qt 解决方案将无法工作。大多数类 UNIX 平台都支持 POSIX API(多一些,少一些),如果您限制自己使用 POSIX 功能,该解决方案将适用于 Linux、BSD、Mac OS X、Solaris 和类似的操作系统。但是,它不适用于 Windows。 Microsoft 决定放弃对 POSIX 的支持(并不是说他们的 POSIX 支持一开始就很好),但是 Cygwin 将 POSIX 支持带回了 Windows(Cygwin 在 Windows 之上模拟了完整的 Linux glibc API)。问题是,甚至 POSIX 都没有真正提供一组函数来解决您的问题 - 例如,在 Linux 系统上,像 ps 这样的 POSIX 工具获取进程信息的方式与 BSD 系统完全不同。

    第二个问题是你在谈论“焦点”。焦点不适用于应用程序。没有 UI 和窗口的后台应用程序不能有“焦点”。对于这样的应用程序,“焦点”意味着什么?因此,您并不真正对正在运行的应用程序列表感兴趣,而是对正在运行的具有窗口且其窗口可能获得焦点的 UI 应用程序列表感兴趣。完全不同的东西。 Windows 系统在不同平台之间的差异更大,POSIX 完全忽略了 UI。

    您的问题还有一个 Visual-C++ 标记,那么您的代码必须真正跨平台,因为 Visual-C++ 是 Windows 唯一的东西,不是吗?您真正尝试支持哪些平台(请相应地更新您的问题),因为我怀疑有没有比为每个受支持的平台编写不同的代码更好的解决方案。

    【讨论】:

      【解决方案2】:

      第一:应用程序没有焦点;窗户做。其次:有些窗口不接受焦点。所以,我认为从字面上看是不可能的。

      【讨论】:

        猜你喜欢
        • 2019-04-26
        • 2021-09-09
        • 1970-01-01
        • 2018-12-22
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        相关资源
        最近更新 更多