Какое окно имеет текущий фокус?

Я хотел бы знать (программно), какое окно имеет текущий фокус. Есть ли независимый способ окна-менеджера обнаружить это?

В противном случае, как определить, какое окно имеет фокус в Compiz или Metacity?

4
задан 10 October 2011 в 22:08

15 ответов

Что вы хотите - это libwnck (если вас просто интересуют окна) или libbamf (если вас интересуют окна и приложения, которые им принадлежат).

3
ответ дан 25 May 2018 в 23:03

Вы хотите libwnck (если вас просто интересуют окна) или libbamf (если вас интересуют окна и приложения, которые им принадлежат).

3
ответ дан 2 August 2018 в 03:56

Если вы счастливы сделать небольшое программирование X11, тогда спецификация EWMH - это то, что вы после - именно _NET_ACTIVE_WINDOW.

3
ответ дан 25 May 2018 в 23:03

попробуйте использовать wnck lib, а затем используйте этот код:

import wnck
import gtk

while True:
if __name__ == '__main__':
    screen = wnck.screen_get_default()
    screen.force_update()
    while True:
        while gtk.events_pending():
            gtk.main_iteration()
        #time.sleep(0.5)
        print screen.get_active_window().get_name()
2
ответ дан 25 May 2018 в 23:03

Хорошо, если вы можете что-то переписать в оболочку:

xdpyinfo | grep focus

Должно работать.

Изменить: для получения более чистого результата попробуйте следующее:

xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2
1
ответ дан 25 May 2018 в 23:03

Еще одна вещь, которую вы можете использовать, - это xdotool:

xdotool getwindowfocus

вернет идентификатор окна сфокусированного окна и:

xdotool getwindowfocus getwindowname

сообщит вам свое имя.

1
ответ дан 25 May 2018 в 23:03
  • 1
    Я получаю xdotool: Unknown command: getwindowname для второго. – Oli♦ 10 February 2011 в 19:41
  • 2
    Вы используете устаревшую версию xdotool. Например, в репозиториях Ubuntu, например, положительно древний. На вашем сайте есть более свежий файл .deb, для некоторых архитектур или при необходимости компилируется из источника. – frabjous 10 February 2011 в 20:34
  • 3
    Не уверен в «позитивном древнем» ... Моя версия - 2.20100701.2961, текущая стабильная - 2.20101012.3049. 3 месяца обычно не означает , что много ... Но если это так, пусть будет так. – Oli♦ 10 February 2011 в 20:45
  • 4
    Я думал об этом в репозиториях Lucid LTS; Маверик не , поэтому плохой, но, видимо, это имеет значение здесь. – frabjous 10 February 2011 в 20:50

Из информации xtool:

getactivewindow
   Output the current active window. This command is often more
   reliable than getwindowfocus. The result is saved to the window
   stack. See "WINDOW STACK" for more details.

Это то, что я использую для получения заголовка. (I a 10.04)

xwininfo -id "$(xdotool getactivewindow)" |sed -n \
  "2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
1
ответ дан 25 May 2018 в 23:03

попробуйте использовать wnck lib, а затем используйте этот код:

import wnck
import gtk

while True:
if __name__ == '__main__':
    screen = wnck.screen_get_default()
    screen.force_update()
    while True:
        while gtk.events_pending():
            gtk.main_iteration()
        #time.sleep(0.5)
        print screen.get_active_window().get_name()
2
ответ дан 31 July 2018 в 12:44

Хорошо, если вы можете что-то переписать в оболочку:

xdpyinfo | grep focus

Должно работать.

Редактировать: для получения более чистого вывода попробуйте следующее:

xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2
1
ответ дан 31 July 2018 в 12:44

Если вы счастливы сделать небольшое программирование X11, то EWMH spec - это то, что вы после этого - в частности _NET_ACTIVE_WINDOW .

3
ответ дан 31 July 2018 в 12:44

Из информации xtool:

getactivewindow
   Output the current active window. This command is often more
   reliable than getwindowfocus. The result is saved to the window
   stack. See "WINDOW STACK" for more details.

Это то, что я использую для получения заголовка. (I a 10.04)

xwininfo -id "$(xdotool getactivewindow)" |sed -n \
  "2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
1
ответ дан 2 August 2018 в 03:56

попробуйте использовать wnck lib, а затем используйте этот код:

import wnck
import gtk

while True:
if __name__ == '__main__':
    screen = wnck.screen_get_default()
    screen.force_update()
    while True:
        while gtk.events_pending():
            gtk.main_iteration()
        #time.sleep(0.5)
        print screen.get_active_window().get_name()
2
ответ дан 4 August 2018 в 20:00

попробуйте использовать wnck lib, а затем используйте этот код:

import wnck
import gtk

while True:
if __name__ == '__main__':
    screen = wnck.screen_get_default()
    screen.force_update()
    while True:
        while gtk.events_pending():
            gtk.main_iteration()
        #time.sleep(0.5)
        print screen.get_active_window().get_name()
2
ответ дан 7 August 2018 в 22:00

попробуйте использовать wnck lib, а затем используйте этот код:

import wnck
import gtk

while True:
if __name__ == '__main__':
    screen = wnck.screen_get_default()
    screen.force_update()
    while True:
        while gtk.events_pending():
            gtk.main_iteration()
        #time.sleep(0.5)
        print screen.get_active_window().get_name()
2
ответ дан 10 August 2018 в 10:14

Еще одна вещь, которую вы можете использовать: xdotool:

xdotool getwindowfocus

вернет идентификатор окна фокусного окна и:

xdotool getwindowfocus getwindowname

сообщит вам свое имя.

1
ответ дан 13 August 2018 в 16:37

Другие вопросы по тегам:

Похожие вопросы: