cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDernière intervention 4 septembre 2008
-
10 juil. 2006 à 11:54
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDerniè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?
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 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.
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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é.
cs_philpas
Messages postés77Date d'inscriptionlundi 17 octobre 2005StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Forman
Messages postés600Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 6 avril 20101 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...