web-dev-qa-db-fra.com

Quelle fenêtre a le focus actuel?

Je voudrais savoir (par programme) quelle fenêtre a le focus actuel. Existe-t-il un moyen indépendant de gérer les fenêtres pour découvrir cela?

Sinon, comment déterminer quelle fenêtre est active dans Compiz ou Metacity?

5
Erigami

Ce que vous voulez, c'est libwnck (si vous êtes uniquement intéressé par Windows) ou libbamf (si vous êtes intéressé par Windows et les applications qui en sont propriétaires).

5
Michael Terry

essayez d'utiliser la bibliothèque wnck puis utilisez ce code:

import wnck
import gtk

while True:
if __== '__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()
3
akazuko

Si vous êtes content de faire un peu de programmation X11, alors le spécification EWMH correspond exactement à ce que vous recherchez, plus précisément _ NET_ACTIVE_WINDOW .

3
RAOF

Une autre chose que vous pouvez utiliser est xdotool:

xdotool getwindowfocus

renverrait l'ID de fenêtre de la fenêtre focalisée, et:

xdotool getwindowfocus getwindowname

vous dirait son nom.

2
frabjous

Eh bien, si vous pouvez envoyer une requête ping à Shell:

xdpyinfo | grep focus

Devrait marcher.

Edit: Pour une sortie légèrement plus propre, essayez ceci:

xdpyinfo | grep -Eo 'window 0x[^,]+' | cut -d" " -f2
1
Oli

De info 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.

C'est ce que j'utilise pour obtenir le titre. (Je un sur 10.04)

xwininfo -id "$(xdotool getactivewindow)" |sed -n \
  "2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p"
1
Peter.O