【发布时间】:2015-09-01 18:04:22
【问题描述】:
我想在用户刚打开窗口时更改它的属性。
在这个例子中,我只是想处理CreateNotify 事件:
#!/usr/bin/python
import Xlib
from Xlib import X, display, error
import time
disp = Xlib.display.Display()
root = disp.screen().root
root.change_attributes(event_mask=Xlib.X.SubstructureNotifyMask)
def getProp(win, prop):
p = win.get_full_property(disp.intern_atom('_NET_WM_' + prop), 0)
return [None] if (p is None) else p.value
while True:
event = disp.next_event()
if event.type == X.CreateNotify:
newWin = event.window
try:
newWinName = getProp(newWin, 'NAME')
newWinPID = getProp(newWin, 'PID')[0]
if newWinName and newWinPID:
print time.strftime('%H:%M:%S'), "- new window:", newWinPID, newWinName
else:
print 'NAME or PID property not found.'
print
except Xlib.error.BadWindow:
print "BadWindow error"
此脚本正确捕获“新窗口”事件。 但是脚本并没有完全输出我的想法,所以我有一些问题。对于这个例子,我打开了一个 Firefox 窗口两次。
- 为什么会发生所有这些事件?我预计会得到 2 个事件,我最后得到了 6 个。
- 这些 BadWindows 错误来自哪里?
- 为什么有些窗口没有
_NET_WM_ID和_NET_WM_NAME属性? - 由于某些软件(如 Firefox)的多个实例具有相同的 PID,如何选择特定窗口(例如仅更改一个 Firefox 实例的属性)?
我使用 Linux Mint Cinnamon(Muffin 窗口管理器)。
有输出:
BadWindow error
19:58:16 - new window: 10510 firefox
NAME or PID property not found.
19:58:16 - new window: 8417 Firefox
19:58:16 - new window: 8417 Firefox
BadWindow error
NAME or PID property not found.
BadWindow error
BadWindow error
19:58:20 - new window: 10519 firefox
19:58:20 - new window: 8417 Firefox
NAME or PID property not found.
19:58:20 - new window: 8417 Firefox
BadWindow error
NAME or PID property not found.
【问题讨论】: