如何實現一種不斷(或短時間間隔)檢查用戶是否與系統交互的後臺進程,即簡單而簡單地使用計算機?顯而易見的方法是檢查用戶生成的任何類型的事件,如按鍵,鼠標移動和鼠標點擊等。在特定應用程序中捕獲事件是很直接的,因爲這些事件通常是通過應用程序的事件循環自動提供的,但是如何實現這個系統範圍內的事務,即不管前面/關注哪個應用程序?這是如何優雅地完成的,所以這樣的過程不會消耗太多的系統資源?我很感興趣,但顯然每種平臺都有不同的方式 - 跨平臺的方式(Java)是理想的,但我選擇的平臺是Mac OS X(Cocoa)。如何在系統範圍內監視用戶活動?
回答
我不知道明確的答案,但我知道我會去哪裏看。 Pidgin和其他開源IM客戶端必須知道用戶是否閒置。我相信你可以使用類似的方法來確定用戶活動。
好主意! Pidgin也是跨平臺的。 –
捕獲像按鍵或鼠標移動這樣的系統事件並不是任何一種語言的境界。這基本上是操作系統管理的內容,因爲您需要一些必須監聽系統範圍事件的機制,您必須以某種方式依賴操作系統提供的API。例如,在Windows上,您將獲得可從Java程序中使用的Win API來偵聽系統範圍的事件。但是這將是特定於Win API的,因此對於Mac OS,它將是不同版本的API。
是的......我正在尋找具體的解決方案,至少有一種情況:) –
也許你會發現這個有用的-http://ubuntuforums.org/archive/index.php/t-864566.html – Bhaskar
這是更多複雜比它需要爲我的目的,但我相信我會需要這樣的事情有一天...謝謝:) –
托馬斯蘭斯頓的想法是檢查pidgin(libpurple)是如何做到這一點非常有幫助的。我下載的源代碼,並發現這一點 -
在洋涇浜-2.10.0 /洋涇浜/ gtkidle.c開始第46行:
/*
* Get the number of seconds the user has been idle. In Unix-world
* this is based on the X Windows usage. In MS Windows this is
* based on keyboard/mouse usage information obtained from the OS.
* In MacOS X, this is based on keyboard/mouse usage information
* obtained from the OS, if configure detected IOKit. Otherwise,
* MacOS X is handled as a case of X Windows.
*
* In Debian bug #271639, jwz says:
*
* Purple should simply ask xscreensaver how long the user has been idle:
* % xscreensaver-command -time
* XScreenSaver 4.18: screen blanked since Tue Sep 14 14:10:45 2004
*
* Or you can monitor the _SCREENSAVER_STATUS property on root window #0.
* Element 0 is the status (0, BLANK, LOCK), element 1 is the time_t since
* the last state change, and subsequent elements are which hack is running
* on the various screens:
* % xprop -f _SCREENSAVER_STATUS 32ac -root _SCREENSAVER_STATUS
* _SCREENSAVER_STATUS(INTEGER) = BLANK, 1095196626, 10, 237
*
* See watch() in xscreensaver/driver/xscreensaver-command.c.
*
* @return The number of seconds the user has been idle.
*/
該文件包含的代碼來處理這種不同平臺。
在Mac OS X(10.4和更高版本),最簡單的方法似乎是這樣的呼籲: CGEventSourceSecondsSinceLastEventType () http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventSourceSecondsSinceLastEventType –
** Nope!** Both jwz的方法只是指示屏幕保護程序上次更改狀態(2004/09/14 == 1095196626)而不是系統上次看到用戶操作時ivity。 _Pidgin實際上並未使用此方法_。相反,它使用[XScreenSaverQueryInfo](http://linux.die.net/man/3/xscreensaverqueryinfo)[建議](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=271639 #20),盧克Schierer,即使沒有人(現代)沒有工作的例子,他們嗤之以鼻,「極其脆弱」。 –
- 1. .NET檢測系統範圍內的用戶活動
- 2. 如何在整個系統範圍內監控/嗅探Intents?
- 3. 我如何監視用戶的活動
- 4. 系統未在範圍內聲明?
- 5. 在系統中監視進程啓動
- 6. Linux系統用戶活動監控工具
- 7. 使用jquery監視用戶的活動
- 8. 如何監視內核執行的系統調用次數?
- 9. 如何使用Java在kubuntu中監視系統統計信息?
- 10. 如何監視用戶在Docker上的活動
- 11. 如何創建系統範圍變量?
- 12. 如何設置系統範圍的umask?
- 13. 系統分析中的系統範圍
- 14. 監視器或用戶在UVM中的覆蓋範圍
- 15. 如何在多用戶系統中獲取UserHandle的活動
- 16. 如何在Android設備上模擬用戶的系統活動?
- 17. 查找在日期範圍內沒有活動的客戶
- 18. 系統範圍內的Ruby irbrc_history。如何使其成爲本地?
- 19. 預約系統的範圍
- 20. Java的系統監視器
- 21. 如何監視Windows中的用戶(in)活動?
- 22. rbenv應該安裝在系統範圍內還是用戶級別?
- 23. 自動隱藏系統範圍內的OS X菜單欄
- 24. 應用活動監視器
- 25. 活動監視器
- 26. 日期範圍內的活動ID
- 27. 靜態範圍內的活動聯盟
- 28. 監視SQL Server 2005帳戶活動
- 29. 如何以編程方式檢查Mac上的免費系統內存(如活動監視器)?
- 30. 系統範圍I/O統計
顯然,我在尋找的是「系統空閒時間」,這是存儲在系統級別的東西,可以通過適當的API /技術讀取...... –
這個** X11 **(例如Linux)版本問題在[檢測鍵盤,鼠標活動在Linux](https://stackoverflow.com/questions/222606/detecting-keyboard-mouse-activity-in-linux)有一個真正的答案,而這個問題沒有。 –