Форум сайта python.su
dll да вы че сума сошли ??? :)
так пойдет ?
import time
from ctypes import *
class LASTINPUTINFO(Structure):
_fields_ = [("cbSize", c_uint),("dwTime", c_uint)]
lii=LASTINPUTINFO(sizeof(LASTINPUTINFO),0)
while True:
windll.user32.GetLastInputInfo(pointer(lii))
print windll.kernel32.GetTickCount()-lii.dwTime
time.sleep(1)
Отредактировано (Янв. 28, 2009 16:05:06)
Офлайн
evgenyl
Во! просто чумовой вариант :) большой сенкс
Офлайн
Прошу прощения, что поднимаю старую тему. Под Windows решение задачи определения простоя юзера имеется… А как быть с аналогичной задачей под Mac OS?
Я нагуглил решение, связанное с использованием команды терминала ioreg -c IOHIDSystem……..
Но как-то не хочется перенаправлять вывод команды в файл с последующем открытием файла и поиском в нём нужного значения. Я попробовал в терминале выдать эту команду и ответом была немаленькая простынка текста. Понятно, что средствами той же операционки можно фильтровать вывод. Но хотелось бы знать, нет ли решения аналогичного виндовому. Может кто-то сталкивался
Отредактировано aleko_s (Ноя. 20, 2016 14:26:03)
Офлайн
uptime - и спарсить вывод ?
Офлайн
uptime показывает время от момента загрузки ОС, если я не ошибаюсь…. Хотелось бы получить время последнего действия юзера. Виндовая user32.GetLastInputInfo показывает время, когда юзер в последний раз что-то сделал клавой или мышью…. То есть разность текущего времени и времени , выдаваемого user32.GetLastInputInfo, даёт время простоя юзера (т.е. время, прошедшее после последнего телодвижения юзера.) Существование аналога виндовой функции user32.GetLastInputInfo в Маке облегчило бы мне задачу. Если аналога нет, придётся парсить вывод команды ioreg. Тоже не страшно, конечно, но как-то корявенько….
для ioreg нагуглил такую штуку
$ sleep 3; ioreg -c IOHIDSystem | grep HIDIdleTime|sed ‘s#.*“HID#”HID#’
“HIDIdleTime” = 2930089953
“HIDIdleTime” = 2932857364
“HIDIdleTime” = 2935033969
“HIDIdleTime” = 2936912079
“HIDIdleTime” = 2939724019
“HIDIdleTime” = 2941758207
“HIDIdleTime” = 2943638209
“HIDIdleTime” = 2952352977
Но в примере всё очень красиво округляется до трёх секунд. А если мне команда выдаст 8 существенно разных значений “HIDIdleTime”? Какие соответствуют клаве и мыши? Задачка….
Отредактировано aleko_s (Ноя. 21, 2016 18:49:58)
Офлайн
Это смотрели ? http://think.random-stuff.org/posts/mac-os-x-user-idle-time-in-python
А вот более правильно решение с ioreg https://www.dssw.co.uk/blog/2015-01-21-inactivity-and-idle-time/
Офлайн
Огромное спасибо! Для определённости остановился на решении с использованием ioreg, так как воочию убедился, что команда даёт искомую величину в числе прочих….
Получилась такая функция в python:
import shlex, subprocess def get_idle_duration(): cmd1 = "ioreg -c IOHIDSystem" cmd2 = "sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'" args1 = shlex.split(cmd1) args2 = shlex.split(cmd2) p1 = subprocess.Popen(args1, stdout=subprocess.PIPE) p2 = subprocess.Popen(args2, stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() out = p2.communicate()[0] ret = int(out)/1000000000 return (ret)
Отредактировано aleko_s (Ноя. 24, 2016 11:22:17)
Офлайн
aleko_sОпять к этой -e прицепились по незнаниюcmd2 = "sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'"
sed '/HIDIdleTime/ !{ d; t }; s/.* = //g; q'
Отредактировано py.user.next (Ноя. 24, 2016 13:09:01)
Офлайн
Спасибо! Буду знать. Оказывается, это stream editor. Век живи - век учись
Офлайн
time.ctime()
Офлайн