Re: [Pyobjc-dev] System Idle Time
Brought to you by:
ronaldoussoren
From: Koen B. <ko...@ma...> - 2006-09-05 16:52:58
|
So I ALMOST got it. The second argument is defined as unsigned int 0xFFFFFFFF But when I try to make one in python, it converts to a long, and I get an error. import objc from Foundation import NSBundle from time import sleep bundle = NSBundle.bundleWithPath_( objc.pathForFramework('ApplicationServices.framework')) objc.loadBundleFunctions(NSBundle.bundleWithPath_( objc.pathForFramework('ApplicationServices.framework')), globals(), [('CGEventSourceSecondsSinceLastEventType', 'iii')]) print int('0xFFFFFFFF', 16) a = int(4294967295) print type(a) # This should work, even though I don't get the 'i' or 'ii' for in/ outputs print CGEventSourceSecondsSinceLastEventType(0, a) / 1000000000.0 On 5-sep-2006, at 17:47, Miklós Fazekas wrote: > The kCG... things are usually defines. So you should copy their > values from the header. > Also note that CGEventSourceSecondsSinceLastEventType takes two ints, > not one. And you probably need to add it's return type too. > > Regards, > Miklós > On Sep 5, 2006, at 4:36 PM, Koen Bok wrote: > >> Thanks, I tried the loadBundleFunctions approach, which I got half- >> working. The function is ok, but I can't get the constants. I >> suspect I need to use loadBundleVariables, but I can't get it >> working. >> >> import objc >> from Foundation import NSBundle >> >> from time import sleep >> >> bundle = NSBundle.bundleWithPath_( >> objc.pathForFramework('ApplicationServices.framework')) >> >> FUNCTIONS = [ >> ('CGEventSourceSecondsSinceLastEventType', 'i') # Should this be >> 'i' or 'ii'? >> ] >> >> VARAIBLES = [ >> ('kCGEventSourceStateCombinedSessionState', objc._C_ID), # Should >> this be 'i' or objc._C_ID >> ('kCGAnyInputEventType', 'i') # Should this be 'i' or objc._C_ID >> ] >> >> objc.loadBundleFunctions(bundle, globals(), FUNCTIONS) >> objc.loadBundleVariables(bundle, globals(), VARAIBLES) >> >> print CGEventSourceSecondsSinceLastEventType >> >> print kCGAnyInputEventType # Not found >> print kCGEventSourceStateCombinedSessionState # Not found >> >> # This should work, even though I don't get the 'i' or 'ii' for in/ >> outputs >> print CGEventSourceSecondsSinceLastEventType( >> kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType) >> >> >> >> >> On 5-sep-2006, at 6:59, Miklós Fazekas wrote: >> >>> I think with pyobjc you have at least 3 choices: >>> >>> 1. Make a regular python c module. >>> >>> 2. Use objc.loadBundleFunctions to load >>> CGEventSourceSecondsSinceLastEventType (see wmEnable.py example) >>> >>> 3. Create an Bundle with an ObjectiveC class, with a static method >>> like: >>> >>> @implementation MyClass >>> + (int)GetIdleTime >>> { >>> long result; >>> GetOSXIdleTime (&result); >>> return result; >>> } >>> @end >>> >>> >>> Then use something like: >>> >>> bundle = NSBundle.bundleWithPath_('/Test/MyBundle.bundle/') >>> MyClass = bundle.classNamed_('MyClass') >>> print MyClass.GetIdleTime() >>> >>> >>> Regards, >>> Miklós >>> >>> On Sep 5, 2006, at 12:58 AM, Koen Bok wrote: >>> >>>> Hey Miklós, >>>> >>>> I tried to get this to work, but I have no clue how. Should I >>>> compile this in C and load it as a .so into python? Or am I >>>> saying something really stupid :-) >>>> >>>> If you could please give me a hint what to do, I would be very >>>> thankful... >>>> >>>> Thanks! Koen >>>> >>>> On 15-jan-2006, at 22:52, Miklós Fazekas wrote: >>>> >>>>> On 10.4 you can use CGEventSourceSecondsSinceLastEventType on >>>>> pre 10.4 you should use the CGSSecondsSinceLastInputEvent SPI. >>>>> I'm using a code like this: >>>>> >>>>> extern "C" { >>>>> extern double CGSSecondsSinceLastInputEvent(long evType); // >>>>> private API for pre 10.4 system's >>>>> } >>>>> >>>>> >>>>> static int GetOSXIdleTime(long *idle) { >>>>> long systemVersion = 0; >>>>> if (Gestalt ( gestaltSystemVersion, &systemVersion) == noErr >>>>> && (systemVersion < 0x1040)) >>>>> { >>>>> // On 10.3 use this SPI >>>>> // from Adium: >>>>> //On MDD Powermacs, the above function will return a >>>>> large value when the machine is active (-1?). >>>>> //Here we check for that value and correctly return a 0 >>>>> idle time. >>>>> double idleTime = CGSSecondsSinceLastInputEvent (-1); >>>>> if (idleTime >= 18446744000.0) idleTime = 0.0; // >>>>> 18446744073.0 >>>>> >>>>> *idle = (long)(1000.0 * idleTime); >>>>> } >>>>> else >>>>> { >>>>> CFTimeInterval timeInterval = >>>>> CGEventSourceSecondsSinceLastEventType >>>>> (kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType); >>>>> *idle = (long)(1000.0 * timeInterval); >>>>> } >>>>> return(0); >>>>> } >>>>> >>>>> Miklós >>>>> >>>>> On Jan 15, 2006, at 9:01 PM, Koen Bok wrote: >>>>>> Anyone already invented a way to get the system idle time? What >>>>>> I'd like to do is trigger a function after 60 secs of idle time. >>>>>> >>>>>> As I understand, there is no public api available to get the >>>>>> system idle time. A solution is posted to the cocoadev list, >>>>>> but needs the IOHIDSystem class. I have no clue how to port >>>>>> this to pyobjc. http://www.cocoabuilder.com/archive/message/ >>>>>> cocoa/2004/10/27/120354 >>>>>> >>>>>> Any other method is also fine with me :-) >>>>> >>>>> >>>>> >>>>> >>>> >>> >>> -------------------------------------------------------------------- >>> - >>> ---- >>> Using Tomcat but need to do more? Need to support web services, >>> security? >>> Get stuff done quickly with pre-integrated technology to make your >>> job easier >>> Download IBM WebSphere Application Server v.1.0.1 based on Apache >>> Geronimo >>> http://sel.as-us.falkag.net/sel? >>> cmd=lnk&kid=120709&bid=263057&dat=121642 >>> _______________________________________________ >>> Pyobjc-dev mailing list >>> Pyo...@li... >>> https://lists.sourceforge.net/lists/listinfo/pyobjc-dev >> > > > ---------------------------------------------------------------------- > --- > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your > job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Pyobjc-dev mailing list > Pyo...@li... > https://lists.sourceforge.net/lists/listinfo/pyobjc-dev |