【问题标题】:How to search a window in all workspaces with python-xlib?如何使用 python-xlib 在所有工作区中搜索窗口?
【发布时间】:2012-11-22 23:16:33
【问题描述】:

我将创建一个 Python 脚本来搜索具有特定标题的窗口并将其置于顶部。 我在当前工作区找到了如何做到这一点: http://ubuntuforums.org/showthread.php?t=1254376

但我想在所有工作区都这样做。我该怎么做?

【问题讨论】:

    标签: python workspace xlib


    【解决方案1】:

    老问题,但我遇到了同样的问题。 答案是,要获取所有工作区上的窗口列表,您不应该测试窗口是否可见(删除“attrs.map_state == X.IsViewable”部分)。

    display = Display()
    root = display.screen().root
    winid_list = root.get_full_property(self.NET_CLIENT_LIST_ATOM,
                                                X.AnyPropertyType).value
    for winid in winid_list:
        win = self.display.create_resource_object('window', winid)
        transient_for = win.get_wm_transient_for()
        wmname = win.get_wm_name()
        if transient_for == None:
            if wmname != None and name in wmname:
                break
    

    【讨论】:

      【解决方案2】:

      代码在查询树中搜索窗口并获取窗口对象,该对象稍后可用于获取查询所需的属性:

      disp = Display() 
      root = disp.screen().root    
      children = root.query_tree().children    
      for win in children:
          try:
              WinName = getProp(disp,win,'NAME') # or win.get_wm_name()
              PIDs = getProp(disp,win,'PID')
              WinPID = newPIDs[0]
      
              if WinName and WinName == DESIRED_NAME:
                  print("found the window with pid: {} winName: {}  winId: {}".format(pid, newWinName,win.id))
                  # Code to bringToTop
              print
      
          except Xlib.error.BadWindow:
              print("BadWindow error")
      
      
      def getProp(disp,win, prop):
          p = win.get_full_property(disp.intern_atom('_NET_WM_' + prop), 0)
          return [None] if (p is None) else p.value
      

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        相关资源
        最近更新 更多