Ik ben een programma aan het schrijven, de bedoeling is dat het programma registreert wanneer de pc actief is. Heeft iemand een idee/manier WAT ik kan controleren of een gebruiker op de computer zit?
Je kan bvb kijken of een gebruiker een toets heeft ingedrukt, en of de muis bewogen heeft.
Maar ik denk dat de grootste moeilijkheid het opvangen van deze events zal zijn. Zeker omdat je programma in de background draait, normaal gezien zal een programma pas reageren op mouse/keyboard events als het actief is. Het moet echter wel mogelijk zijn met dll-functies in windows, maar of het gemakkelijk is???
Een moeilijk geval maar je zou misschien kunnen kijken of de CPU bezig is met een taak? Bv als de CPU boven de x% zit, dan is de user actief. Of als de screensaver actief is... probleem hiermee is dat de gebruiker die kan uitschakelen.
Je kan bvb kijken of een gebruiker een toets heeft ingedrukt, en of de muis bewogen heeft.
Maar ik denk dat de grootste moeilijkheid het opvangen van deze events zal zijn. Zeker omdat je programma in de background draait, normaal gezien zal een programma pas reageren op mouse/keyboard events als het actief is. Het moet echter wel mogelijk zijn met dll-functies in windows, maar of het gemakkelijk is???
Jup, zo wou ik het dus ook doen, maar het probleem zit hem idd bij het "in de achtergrond draaien". Dat is waarom ik het er expliciet had bijgezet.
Nu, ik ga even verder zoeken op die dll-functies, bedankt ;)
@Stijn
Ehm, zou ik kunnen doen, maar is niet goed genoeg. Als een antivirus aan het scannen is, of als de gebruikers iets doet met weinig CPU verbruik kan ik het ook niet zien...
Het is bijvoorbeeld zo dat, als je naar een film aan het kijken bent, de CPU-levels best meevallen, er geen screensaver verschijnt en over het algemeen de muis/keyboard niet beweegt Anderzijds zijn er veel applicaties die pas intensief iets gaan doen als de gebruiker inactief is, dus dan klopt dat ook alweer niet. Punt is wel dat laatstgenoemde dat ook op een of andere manier checken, dus het kan zeker
Hooking is the way to go, je zal waarschijnlijk je eigen dll moeten schrijven. En daarna via JNI deze low-level hook benaderen.
Als er film afspeelt zal je moeten kijken welk programma actief is (wmplayer, divxplayer,...) en er van uitgaan dat als deze actief zijn, de user ook aanwezig is.
Ik heb al wat verder gezocht, heb nu enkele dingen gevonden. Ben benieuwd of het gaat werken... En anders toch maar is kijken voor hooks al denk ik dat dit heel moeilijk zal gaan
Ik kan nog niet testen aangezien ik nog niet thuis ben, maar zou het volgende KUNNEN mijn probleem oplossen?:
EventQueue ev = Toolkit.getSystemEventQueue();
// MyCustomEventQueue extends EventQueue and processes keyboard events in the dispatch
ev.push(new MyCustomEventQueue());
class MyEventQueue extends EventQueue
{
protected void dispatchEvent(AWTEvent event)
{
// all AWTEvents can be indentified by type, KeyEvent, MouseEvent, etc
// look for KeyEvents and match against you hotkeys / callbacks
}
}
Ik vrees dat dit niet gaat werken. Aangezien het inwerkt op de status de applet zelf (je gebruikt hiervoor de package awt als ik mij niet vergis).
Volgende vind ik op de site van MS (http://207.46.1...60%29.aspx)
MSDN-Visual Studio Developer Center schreef:
Get the application's or applet's EventQueue instance. Depending on the Toolkit implementation, different EventQueues may be returned for different applets. Applets should therefore not assume that the EventQueue instance returned by this method will be shared by other applets or the system.
Ik denk echt dat hooks de enige manier zijn, aangezien je moet ingrijpen op de API van Windows zelf. Moeilijk gaat ook natuurlijk
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.