login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[Java]User activiteit controleren

Offline valles10 - 22/02/2011 17:51
Avatar van valles10HTML interesse 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?

Nb:
Het programma moet in de background draaien.

11 antwoorden

Gesponsorde links
Offline Beirensg - 22/02/2011 18:30
Avatar van Beirensg HTML beginner 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???
Offline Stijn - 22/02/2011 18:58
Avatar van Stijn PHP expert 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.
Offline valles10 - 22/02/2011 18:58 (laatste wijziging 22/02/2011 19:08)
Avatar van valles10 HTML interesse
Beirensg schreef:
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...

Ik kom bij dit terecht:
http://msdn.microsoft.com/en-us/library/ms644960
even verder uitzoeken, want dit is voor C++
Offline Stijn - 22/02/2011 19:10 (laatste wijziging 22/02/2011 19:12)
Avatar van Stijn PHP expert @Valles10: Je kan perfect C++ code oproepen in Java dankzij JNI. Het is gewoon een beetje moeilijk .
Bedankt door: Beirensg
Offline Maarten - 22/02/2011 23:30
Avatar van Maarten Erelid 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 
Offline Beirensg - 23/02/2011 08:51
Avatar van Beirensg HTML beginner 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.

Je hebt wel niet het gemakkelijkste uitgekozen 
Offline Ontani - 23/02/2011 09:11
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
Beirensg schreef:
... welk programma actief is (wmplayer, divxplayer,...) en er van uitgaan dat als deze actief zijn, de user ook aanwezig is...


Ik zou het vrij gemakkelijk proberen te houden.

- Check of muis of toetsenbord gebruikt worden
- Check of er geluid uit de luidsprekers komt (muziek / video) maar niet tijdens een screensaver.
Offline valles10 - 23/02/2011 12:04
Avatar van valles10 HTML interesse Ja, ik weet dat het niet het makkelijkste is, maar dat was onder meer een reden waarom ik dit wou proberen.
Offline Beirensg - 23/02/2011 12:07
Avatar van Beirensg HTML beginner Ik zou zeggen: veel succes en houd ons op de hoogte van de problemen en/of oplossingen. 
Offline valles10 - 25/02/2011 13:41 (laatste wijziging 25/02/2011 13:43)
Avatar van valles10 HTML interesse 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?:
  1. EventQueue ev = Toolkit.getSystemEventQueue();
  2. // MyCustomEventQueue extends EventQueue and processes keyboard events in the dispatch
  3. ev.push(new MyCustomEventQueue());
  4.  
  5. class MyEventQueue extends EventQueue
  6. {
  7. protected void dispatchEvent(AWTEvent event)
  8. {
  9. // all AWTEvents can be indentified by type, KeyEvent, MouseEvent, etc
  10. // look for KeyEvents and match against you hotkeys / callbacks
  11. }
  12. }
Offline Beirensg - 25/02/2011 13:55
Avatar van Beirensg HTML beginner 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.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.203s