我正在編寫一個腳本,記錄每天在每個應用程序上花費多少時間。 但我不知道如何獲得我關注的過程及其名稱。 我該如何做到這一點?順便說一句,我看到很多方法來獲得聚焦的窗口ID。 我可以用它來獲取進程名稱嗎?Python - 我如何獲得Ubuntu上關注窗口的進程名稱(不是窗口標題)
2
A
回答
2
你想要的是使用python-xlib你想查找的地方events。
由於使用的例子,我用它來創建kitt,處理上Xorg的多點觸控手勢的東西:
下面的代碼:
from Xlib import X, XK, protocol, display, Xcursorfont
from Xlib.ext import xtest
from Xlib.protocol import request
disp = display.Display()
root = disp.screen().root
pointer_info = request.QueryPointer(display = disp.display,
window = root)
root_xpos, root_ypos = (pointer_info._data['root_x'], pointer_info._data['root_y'])
targetwindow = disp.get_input_focus().focus
現在一次你得到了targetwindow
,你可以得到很多東西,如id。
現在,要回你的問題「如何讓一個窗口的PID」,得到的回答是,這是 不太可能的,因爲several reasons, 雖然有周圍的黑客。
這些黑客背後的想法是,雖然你不知道什麼確切的進程(和它的PID)正在運行窗口,你可以知道它的全名。您不能這樣做,因爲Xorg是一個客戶端 - 服務器系統,其中應用程序可以是遠程計算機上運行的進程,它可以具有與本地進程相同的PID。但是,黑客的想法是獲取程序的全名(使用WM_CLASS
屬性),並從進程列表中猜出PID。
最明顯的,使用xprop
ps -o pid,comm,args $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}")
或
xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) _NET_WM_NAME WM_CLASS
甚至使用xdotool。
但是,回到我們使用的Xlib,我敢肯定它可以用代碼來實現 像that one, 雖然我沒有爲一個現成的代碼,但你必須檢查那裏的WM_CLASS
屬性。其中將包含如在進程列表中的應用程序的名稱...田田\ O/
HTH
+0
謝謝你的建議。我會嘗試。 – MangoKing
相關問題
- 1. 獲取窗口標題從進程名
- 2. 如何獲取窗口名稱? [Python]
- 3. 獲取進程名稱窗口標題名稱和安裝的軟件名稱
- 4. 如何使用窗口標題來獲得進程ID和進程名
- 5. 我想獲得進程名,進程ID,進程路徑,產品名稱窗口標題
- 6. 如何獲得窗口標題?
- 7. 在haskell上獲得專注的窗口名稱(Windows)
- 8. 從進程ID獲取窗口標題
- 9. c#獲取進程窗口標題
- 10. 防止關注python窗口
- 11. 獲取窗口標題爲「someWinTitle」的應用程序的名稱
- 12. XLib窗口名稱問題
- 13. C# - 如何關閉當前窗口,並獲得新窗口
- 14. 窗口窗口管理器的名稱
- 15. 如何獲取進程的主窗口(而不是窗口句柄)?
- 16. 枚舉過程,並獲得其關聯的窗口標題
- 17. VIM拆分窗口:關注新窗口
- 18. 如何在Xorg中獲取窗口的圖標名稱?
- 19. 在窗口上使用不同名稱的進程
- 20. 按標題查找窗口窗口的標題是什麼?
- 21. 如何從它的進程路徑獲取窗口標題
- 22. 如何使用vb.net獲取進程的窗口標題
- 23. 關閉標題窗口
- 24. 如何用Cocoa獲得關鍵值,而不管是否關注窗口
- 25. LoadRunner如何捕獲活動窗口名稱(這是彈出窗口)
- 26. 獲得一個Windows稱號是沒有主窗口的進程名
- 27. Flex:如何在關閉標題窗口後將標題窗口中的值傳遞給主窗口?
- 28. 使用python獲取窗口標題?
- 29. 你如何獲得Titanium Mobile當前關注的窗口?
- 30. 獲取活動窗口的名稱
因此,它不是一個真正的DUP,但供參考:http://stackoverflow.com/questions/151407/how-to-get-an-x11-window-from-a-process-id and http://stackoverflow.com/questions/2041532/getting-pid-and-details-for-topmost-window – zmo