首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python和Xorg获取当前窗口标题

使用Python和Xorg获取当前窗口标题
EN

Stack Overflow用户
提问于 2010-08-24 05:14:53
回答 7查看 8.1K关注 0票数 8

在stackoverflow回答了我之前关于Wiimote左/右点击问题的问题后,我不仅可以移动鼠标光标,我现在还可以左/右点击东西。我现在还有一个问题。

我在python中使用什么来获取当前活动窗口的标题?在谷歌上搜索“Linux窗口标题”,“X11 Python窗口标题”和类似的东西后,我找到的只有win32和tkinker (又来了?),这不是我需要的。

如果你能帮上忙,那就太棒了!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-08-24 07:28:40

编辑

最好的方法:

代码语言:javascript
复制
import gtk
import wnck
import glib

class WindowTitle(object):
    def __init__(self):
        self.title = None
        glib.timeout_add(100, self.get_title)

    def get_title(self):
        try:
            title = wnck.screen_get_default().get_active_window().get_name()
            if self.title != title:
                self.title  = title
                print title
        except AttributeError:
            pass
        return True

WindowTitle()
gtk.main()

另一种方式:

代码语言:javascript
复制
from subprocess import PIPE, Popen
import time

title = ''
root_check = ''

while True:
    time.sleep(0.6)
    root = Popen(['xprop', '-root'],  stdout=PIPE)

    if root.stdout != root_check:
        root_check = root.stdout

        for i in root.stdout:
            if '_NET_ACTIVE_WINDOW(WINDOW):' in i:
                id_ = i.split()[4]
                id_w = Popen(['xprop', '-id', id_], stdout=PIPE)

        for j in id_w.stdout:
            if 'WM_ICON_NAME(STRING)' in j:
                if title != j.split()[2]:
                    title = j.split()[2]
                    print "current window title: %s" % title
票数 12
EN

Stack Overflow用户

发布于 2018-07-20 20:07:11

我注意到wnck需要GTK事件循环来更新活动窗口。Xlib没有这样的问题:

代码语言:javascript
复制
import Xlib
import Xlib.display
disp = Xlib.display.Display()
window = disp.get_input_focus().focus

# Get active window class and name
window.get_wm_class()
window.get_wm_name()
票数 5
EN

Stack Overflow用户

发布于 2011-06-23 17:00:24

killown的基于xprop的解决方案可以压缩成一条语句(虽然冗长):

代码语言:javascript
复制
import subprocess
def GetActiveWindowTitle():
    return subprocess.Popen(["xprop", "-id", subprocess.Popen(["xprop", "-root", "_NET_ACTIVE_WINDOW"], stdout=subprocess.PIPE).communicate()[0].strip().split()[-1], "WM_NAME"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip().split('"', 1)[-1][:-1]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3551754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档