我正在尝试获取活动窗口的标题。该应用程序是一个后台任务,因此如果用户打开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
xdotool getactivewindow