Я хочу, чтобы обнаружить имя окна приложения при изменении события фокусировки происходит с питоном Xlib, поэтому на первом этапе я использую этот код:Как «правильно» обнаружить имя приложения при изменении события фокусировки происходит с питоном Xlib
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import Xlib.display
import time
display = Xlib.display.Display()
while True:
window = display.get_input_focus().focus
wmname = window.get_wm_name()
wmclass = window.get_wm_class()
if wmclass is None and wmname is None:
window = window.query_tree().parent
wmname = window.get_wm_name()
print "WM Name: %s" % (wmname,)
time.sleep(3)
Но я хочу, правильный путь, то я исследую о XLIB событиях и найти Input Focus Events и написать этот код:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import Xlib.display
from Xlib import X
def main():
display = Xlib.display.Display(':0')
root = display.screen().root
root.change_attributes(event_mask=Xlib.X.FocusChangeMask)
while True:
event = root.display.next_event()
#if event.type == X.FocusIn or event.type == X.FocusOut:
if event.type == X.FocusOut :
window = display.get_input_focus().focus
wmname = window.get_wm_name()
wmclass = window.get_wm_class()
if wmclass is None and wmname is None:
window = window.query_tree().parent
wmname = window.get_wm_name()
print "WM Name: %s" % (wmname,)
if __name__ == "__main__":
main()
к сожалению, это не правильно работать, особенно в вкладках на Google Chrome и Firefox, так что есть правильный путь для этой ситуации?