我正试图获取当前窗口的标题。该应用程序是一个后台任务,因此如果用户已打开Eclipse,则该函数返回“Eclipse - blabla”,因此它无法获取我的自己窗口的窗口标题。我正在使用Python 2.6和PyQt4进行开发。
我的当前解决方案是从SO的旧答案中借鉴并稍作修改,如下所示:
我的当前解决方案是从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\"')
它适用于大多数Windows系统,但不适用于全部。例如,它无法找到我的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;
但是因为某些原因,window 总是为 None。
有人有更好的方法来获取当前窗口标题吗?或者怎样修改我的方法,让它适用于所有窗口?
编辑:
如果有人想知道,这是我发现的似乎适用于所有窗口的方法。
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"