我試圖獲取活動窗口的標題。該應用程序是後臺任務,因此如果用戶打開Eclipse,該函數將返回「Eclipse - blabla」,所以它不會獲得我自己窗口的窗口標題。我正在使用PyQt4在Python 2.6中進行開發。在X中獲取活動窗口標題
我目前的解決方案,有借,微翹的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"
是有目的複製標準輸出到root_check如果stdout不爲空? – enthdegree 2012-08-10 18:14:00
進一步查看Alex Spurlings的解決方案,他將這一部分拿走了。 – dutt 2012-08-11 21:22:53