当前位置: 首页 > 面试题库 >

在X中获取活动的窗口标题

彭华皓
2023-03-14
问题内容

我正在尝试获取活动窗口的标题。该应用程序是一个后台任务,因此如果用户打开Eclipse,该函数将返回“ Eclipse-
blabla”,因此它不会获取我自己窗口的窗口标题。我正在使用PyQt4在Python 2.6中进行开发

我当前的解决方案是从SO的旧答案中借用并稍作修改的,看起来像这样:

def get_active_window_title():
    title = "'
    root_check = "'

    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]:
                    return j.split("= ")[1].strip(' \n\"')

它适用于大多数窗口,但不是全部。例如,它找不到我的kopete聊天窗口,或者找不到我当前正在开发的应用程序的名称。

我的下一个尝试如下所示:

def get_active_window_title(self):
    screen = wnck.screen_get_default()
    if screen == None:
        return "Could not get screen"
    window = screen.get_active_window()
    if window == None:
        return "Could not get window"
    title = window.get_name()
    return title;

但是出于某种原因, 窗口 始终为“无”。

是否有人有更好的方法来获取当前窗口标题,或者如何修改我的一种方法,该方法适用于所有窗口?

编辑:

如果有人想知道这是我发现对所有窗口都适用的方式。

def get_active_window_title(self):
    root_check = ''
    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)
        id_w.wait()
        buff = []
        for j in id_w.stdout:
            buff.append(j)

        for line in buff:
            match = re.match("WM_NAME\((?P<type>.+)\) = (?P<name>.+)", line)
            if match != None:
                type = match.group("type")
                if type == "STRING" or type == "COMPOUND_TEXT":
                    return match.group("name")
        return "Active window not found"

问题答案:

xdotool 可以做到的。

xdotool getactivewindow



 类似资料:
  • 问题内容: 参考先前提出的问题,我想知道如何获取当前活动文档的标题。 我尝试了上述问题的答案中提到的脚本。这有效,但仅给我应用程序的名称。例如,我正在写这个问题:启动脚本时,它将为我提供应用程序的名称,即“ Firefox”。这很干净,但并没有真正的帮助。我想记录我当前活动文档的标题。看到图像。 Firefox标题http://img.skitch.com/20090126-nq2egknhjr9

  • 问题内容: 我试图用Java升级我的应用程序,使其仅在具有特定名称的进程窗口处于活动状态时才能工作。我发现使用JNI可以做到这一点,但是我不知道该怎么做。我只是找不到任何可以解释它的描述或示例。我的问题是- 如何获取Windows中当前活动窗口的进程名称(通过JNI或其他方式-我接受任何其他解决方案)? 问题答案: 减轻您的痛苦,并使用JNA。您将需要下载 Win32 API的 jna.jar 和

  • 问题内容: 我希望找到一种方法来获取当前可见窗口的位置(相对于总页面宽度/高度),以便可以将其强制从一个部分滚动到另一部分。但是,要猜测哪个对象对您的浏览器拥有真正的X / Y,似乎有很多选择。 为了确保IE 6 +,FF 2+和Chrome / Safari能正常工作,我需要选择以下哪两项? 还有其他吗?一旦知道窗口在哪里,就可以设置一个事件链,该事件链将缓慢调用直到到达所需的位置。 问题答案:

  • 问题内容: 有没有一种方法可以使用Python在Mac OS X上的给定时间查找当前活动窗口的应用程序名称? 问题答案: 这应该工作: 仅适用于Leopard,如果安装了PyObjC,并且仅在第一行中指向正确的python二进制文件,则在Tiger上工作(如果您已经安装了通用MacPython,则可能要在Tiger上这样做)。但是Peter用Carbon的方式做这件事的答案可能会快很多,因为从Py

  • 问题内容: 如何在ReactJS中获得视口高度?在普通的JavaScript中,我使用 但是使用ReactJS,我不确定如何获取此信息。我的理解是 仅适用于创建的组件。但是,对于or 元素而言并非如此,这可能会给我窗口的高度。 问题答案: 设置道具 视口高度现在可以在渲染模板中用作{this.state.height}

  • 有没有什么方法可以得到窗口标题而不做任何开关在硒? 目前我正在使用以下代码: