Détecter l'absence d'activité

Résolu
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008 - 10 juil. 2006 à 11:54
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 - 17 juil. 2006 à 22:28
Bonjour, j'aurais besoin de vos lumières car pour le moment je vois pas comment faire. J'utilise plusieurs fiche sur mon application. Pour faire court j'ai une fiche planning où l'opérateur choisi les fichiers qu'il désire envoyer sur une commande numérique par le port COM. Une fois que l'opérateur à envoyer un fichier, une autre fiche apparait. Cette fiche affiche un compteur de pièce qui est mis à jour par la commande numérique. L'opérateur peut à tout moment quitter la fiche compteur pour revenir sur la fiche planning. Hors je voudrais que la fiche compteur revienne à l'écran si je ne détecte plus d'activité que ce soit clavier ou souris car l'opérateur ne remettra pas forcément la fiche compteur à l'écran.
Comment détecte on qu'il n'y a pas d'activité sur le clavier et sur la souris? et comment je redéclenche le réaffichage de la fiche compteur?

merci d'avance

5 réponses

cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
10 juil. 2006 à 12:31
function GetIdleTime:Cardinal;
var
  LI:TLastInputInfo;
begin
  LI.cbSize:=SizeOf(LI);
  GetLastInputInfo(LI);
  Result:=GetTickCount-LI.dwTime;
end;

Cette fonction te renvoie (en millisecondes) le temps écoulé depuis la dernière action de l'utilisateur (click, touche du clavier ou mouvement de la souris). Il te suffit de l'utiliser dans un Timer par exemple:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if
GetIdleTime>10000 then begin
    //<-Code pour afficher le compteur
    Timer1.Enabled:=False;
  end;


end;



Tu devras lancer le Timer1 lorsque tu cacheras la fenêtre du compteur.
3
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
10 juil. 2006 à 14:13
Merci de ton aide, c'est ce que je cherchais. Je vais utiliser ton code.

Une remarque, sur le net, j'ai cherché la signification de GetLastInputInfo. Et je suis tombé sur une info intéressante. Si la souris (optique en général) présente une anomalie,  c'est à dire que le pointeur bouge en permanence de 1 ou 2 pixels sur l'écran, la fonction considère qu'il y a une activité.
0
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
10 juil. 2006 à 15:19
J'avais déjà remarqué, ça le fait chez moi
0
cs_philpas Messages postés 77 Date d'inscription lundi 17 octobre 2005 Statut Membre Dernière intervention 4 septembre 2008
17 juil. 2006 à 11:39
Ton code fonctionne bien sous Win2000 et XP, mais je viens de testé mon programme sous win95 et 98 et là ça ne marche pas. Hors mon logiciel dois aussi fonctionner sous ces environnements. J'ai le message "le fichier machine.exe est lié à une exportation manquante user32.dll:GetLastInputInfo"
Y a t-il une fonction équivalente à GetLastInputInfo pour Win95/98 pour connaitre le temps d'inactivité du pc?
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
17 juil. 2006 à 22:28
Non je ne crois pas qu'il y ait un équivalent Win95, il faudra le programmer "à la main" alors. Pour ça tu as les fonctions:
GetCursorPos (pour avoir la position de la souris)
et
GetKeyboardState (pour avoir l'état des touches du clavier)

il te suffit de faire un Timer toutes les 100millisecondes par exemple et vérifier qu'aucune touche du clavier n'a été enfoncée et que la souris n'a pas (beaucoup) bougé. L'avantage c'est que tu pourras ignorer les micro-déplacements de la souris, l'inconvénient c'est que c'est très laid comme méthode, et que ça consomme de la resource processeur pour pas grand chose...
0
Rejoignez-nous