linux显示空闲时间,如何在Windows,Linux和MacOS中确定Python的显示空闲时间?

如果您使用的PyGTK和X11在Linux上,你可以做这样的事情,这是基于什么洋泾浜的作用:

import ctypes

import ctypes.util

import platform

class XScreenSaverInfo(ctypes.Structure):

_fields_ = [('window', ctypes.c_long),

('state', ctypes.c_int),

('kind', ctypes.c_int),

('til_or_since', ctypes.c_ulong),

('idle', ctypes.c_ulong),

('eventMask', ctypes.c_ulong)]

class IdleXScreenSaver(object):

def __init__(self):

self.xss = self._get_library('Xss')

self.gdk = self._get_library('gdk-x11-2.0')

self.gdk.gdk_display_get_default.restype = ctypes.c_void_p

# GDK_DISPLAY_XDISPLAY expands to gdk_x11_display_get_xdisplay

self.gdk.gdk_x11_display_get_xdisplay.restype = ctypes.c_void_p

self.gdk.gdk_x11_display_get_xdisplay.argtypes = [ctypes.c_void_p]

# GDK_ROOT_WINDOW expands to gdk_x11_get_default_root_xwindow

self.gdk.gdk_x11_get_default_root_xwindow.restype = ctypes.c_void_p

self.xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo)

self.xss.XScreenSaverQueryExtension.restype = ctypes.c_int

self.xss.XScreenSaverQueryExtension.argtypes = [ctypes.c_void_p,

ctypes.POINTER(ctypes.c_int),

ctypes.POINTER(ctypes.c_int)]

self.xss.XScreenSaverQueryInfo.restype = ctypes.c_int

self.xss.XScreenSaverQueryInfo.argtypes = [ctypes.c_void_p,

ctypes.c_void_p,

ctypes.POINTER(XScreenSaverInfo)]

# gtk_init() must have been called for this to work

import gtk

gtk # pyflakes

# has_extension = XScreenSaverQueryExtension(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),

# &event_base, &error_base);

event_base = ctypes.c_int()

error_base = ctypes.c_int()

gtk_display = self.gdk.gdk_display_get_default()

self.dpy = self.gdk.gdk_x11_display_get_xdisplay(gtk_display)

available = self.xss.XScreenSaverQueryExtension(self.dpy,

ctypes.byref(event_base),

ctypes.byref(error_base))

if available == 1:

self.xss_info = self.xss.XScreenSaverAllocInfo()

else:

self.xss_info = None

def _get_library(self, libname):

path = ctypes.util.find_library(libname)

if not path:

raise ImportError('Could not find library "%s"' % (libname,))

lib = ctypes.cdll.LoadLibrary(path)

assert lib

return lib

def get_idle(self):

if not self.xss_info:

return 0

# XScreenSaverQueryInfo(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),

# GDK_ROOT_WINDOW(), mit_info);

drawable = self.gdk.gdk_x11_get_default_root_xwindow()

self.xss.XScreenSaverQueryInfo(self.dpy, drawable, self.xss_info)

# return (mit_info->idle)/1000;

return self.xss_info.contents.idle/1000

上面的例子使用通过ctypes的GDK能够访问X11专用。 Xscreensaver API也需要通过ctypes来访问。

它应该很容易移植到使用PyGI和内省。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值