По-настоящему кроссплатформенного понятия переднего плана нет, но на основных платформах есть способы сделать это в соответствии с представлением, которое у них есть переднего плана .
Linux, macOS, и другие Unix:
Для определения того, является ли процесс приоритетным или нет, вам необходимо проверить, является ли его идентификатор группы процессов идентификатором управляющей группы процессов терминала. Что касается Tcl, вы должны увидеть системные вызовы getpgrp()
и tcgetpgrp()
(оба POSIX). Tcl не имеет встроенного представления ни того, ни другого, поэтому вы говорите либо о скомпилированном расширении (могу ли я порекомендовать Critcl для этого?), Либо о вызове внешней программы, например ps
. К счастью, если вы используете последнее (разумный вариант, если это всего лишь случайная операция), вы, как правило, можете подготовить вывод так, чтобы вы получали только ту информацию, которая вам нужна, и вам не нужно ее анализировать. 1016 *Windows
Для этого есть код , а необходимые вызовы поддерживаются расширением TWAPI , поэтому вам не нужно создавать свой собственный. (ВНИМАНИЕ! Я это не тестировал!)
package require twapi_ui
proc isForeground {{pid 0}} {
set forground_pid [get_window_thread [get_foreground_window]]
return [expr {($pid ? $pid : [pid]) == $foreground_pid}]
}