Нет настоящего кроссплатформенного способа сделать это. Вся концепция процессов, приложений и т. Д. Является концепцией операционной системы. Если вы используете определенную библиотеку для решения этой проблемы, вы не являетесь кроссплатформенным, вы ограничены платформами, которые поддерживаются этой библиотекой. Например. Qt не является универсальной кроссплатформенной платформой, она работает на многих платформах, но не на всех известных, а на платформах, где она не работает, решение Qt не будет работать. Большинство UNIX-подобных платформ поддерживают POSIX API (некоторые больше, некоторые меньше), и если вы ограничитесь функциями POSIX, решение будет работать в Linux, BSD, Mac OS X, Solaris и аналогичных ОС. Это не будет работать на Windows, хотя. Microsoft решила отказаться от поддержки POSIX (не то, чтобы их поддержка POSIX была хорошей для начала), однако Cygwin возвращает поддержку POSIX в Windows (Cygwin эмулирует полноценный Linux glibc API поверх Windows). Проблема в том, что даже POSIX действительно не предлагает набор функций для решения вашей проблемы - способ, которым инструмент POSIX, такой как ps, получает информацию о процессе, совершенно отличается в системе Linux от системы BSD, например.
Вторая проблема заключается в том, что вы говорите «фокус». Фокус это то, что не относится к приложениям. Фоновое приложение без интерфейса и окон не может иметь «фокус». Что будет означать «фокус» для такого приложения? Таким образом, вы на самом деле не заинтересованы в списке запущенных приложений, а в списке запущенных приложений пользовательского интерфейса, у которых есть окна и чьи окна могут получить фокус. Совершенно другая вещь. Системы Windows еще более различны для разных платформ, а POSIX полностью игнорирует пользовательский интерфейс.
Кроме того, у вас есть вопрос Visual-C ++ по вашему вопросу, так каким должен быть кросс-платформенный код в вашем коде, поскольку Visual-C ++ - это единственная вещь для Windows, не так ли? Какие платформы вы действительно пытаетесь поддерживать (пожалуйста, обновите свой вопрос соответствующим образом), поскольку я сомневаюсь, что есть лучшее решение, чем написание отдельного фрагмента кода для каждой поддерживаемой платформы.