Page 1 sur 1

[..] IsAutoRepeat()

Posté : ven. 28 mai 2010 12:22
par berthozero
Bonjour, j'aurai besoin de la fonction isAutoRepeat() pour savoir si ... euh (trop dur a expliquer) voir ici ==> Doc Qt sur isAutoRepeat() de la classe QKeyEvent

J'ai recherché dans pleins de fichiers de mon ordi (C:\Qt\...) mais je n'est pas trouvé cette fonction, car au début je voulait la reproduire en AutoIt, mais si je ne la trouve pas bah je ne peux pas, sinon j'ai essayé avec les DLL (que je ne maitrise pas trop bien) grâce à la library MSDN mais rien trouvé qui fonctionne ou que j'arrive à faire fonctionner :?

Quelqu'un pourrai me dire comment faire ou me donner le code SVP ?

PS: je voudrai que la fonction renvoi 1 si c'est une auto-répétition et 0 si c'est un appuy initial

aaaaaaaa (en restant appuyé)

Le premier a n'est pas une auto-répétition, les autres si !

Re: [..] IsAutoRepeat()

Posté : sam. 29 mai 2010 09:01
par berthozero
UP, aidez moi svp c'est important :(

Re: [..] IsAutoRepeat()

Posté : sam. 29 mai 2010 10:28
par ragnoff
Bonjour

Alors, je n'ai peut être pas compris pleinement les enjeu de ce que vous voulez faire, mais écrire vos aaaaa de couleur différente peut se faire simplement en utilisant la fonction _ispressed et un jeu de variable.

Par exemple, dans une boucle :

Code : Tout sélectionner

$a = 0
While 1 
    if _IsPressed("41") Then
        Select
            case $a = 0 
                ;action 1 ==> votre a rouge
                $a = 1
            Case $a = 1
                ; action 2 ==> vos a verts
        EndSelect
    Else
        $a = 0
    EndIf
WEnd

 
Certes, ça tient plus de la bidouille que de quelque chose de sérieux, en attendant, ça peut dépanner. Attention, j ai pas mis l include de _ispressed.

Re: [..] IsAutoRepeat()

Posté : sam. 29 mai 2010 11:06
par Tlem
Ce n'est pas ce que berthozero recherche.

Il voudrait simplement savoir si il y à répétition de touche.
Et quand il parle de répétition, il voudrait plus spécialement détecter l'événement auto-répétition d'une touche produit par Windows.

Là comme ça, je n'ai pas de réponse. Mais je verrais bien un truc avec un appel de DLL Windows ou tout simplement l'utilisation des Windows Message Codes de la documentation. ;)

Re: [..] IsAutoRepeat()

Posté : sam. 29 mai 2010 18:48
par jchd
Le seul problème est que ce n'est pas Windows qui gère l'auto-repeat, mais le clavier lui-même.

Pour détecter l'auto-repeat, il faut utiliser ceci avec WM_KEYBOARD.
Voici un exemple d'utilisation :
► Afficher le texte
C'est brut de fonderie et le code des touches ne correspond pas (directement) au caractère entré. Entre les deux il y a, entre autres, un pilote clavier. Mais on peut synchroniser avec d'autres appels pour rapprocher code vKey et caractère réel, s'il y a vraiment besoin.

Re: [..] IsAutoRepeat()

Posté : sam. 29 mai 2010 22:54
par Tlem
jchd a écrit :Le seul problème est que ce n'est pas Windows qui gère l'auto-repeat, mais le clavier lui-même.
Je ne suis pas du tout certain de cette affirmation. En tout cas Windows peut avoir son mot à dire car sous mon Windows XP SP3, dans le panneau de configuration, dans la partie clavier; il est possible de régler la fréquence de répétition ...

Donc si Windows est capable de modifier cette partie, il est capable de détecter le moment de la répétition ... :roll:
Il doit donc bien exister un événement Windows, ou alors il est possible d'utiliser une API afin de détecter aussi cet événement. ;)

Re: [..] IsAutoRepeat()

Posté : dim. 30 mai 2010 00:06
par jchd
La fréquence de répétition et le délai avant première répétition sont envoyés au 8042 qui les passe au clavier.
Windows permet de gérer ces paramètres, mais n'intervient pas directement dans leur réalisation.

Par contre, le contrôleur clavier (ex 8042, maintenant noyé dans le chipset) renvoie le mot d'état qui est accessible en lParam par l'appel dont j'ai fourni un exemple.

L'exemple d'emploi de l'API Windows que tu appelles de tes voeux est en spoiler dans mon post.

Re: [..] IsAutoRepeat()

Posté : dim. 30 mai 2010 00:21
par Tlem
[mode mauvaise fois ON]
Comme il n'y avait pas les balises de code dans le spoiler, je n'avais pas vu. J'ai donc rajouté les balises et lu votre code. :P
[mode mauvaise fois OFF]

Ceci dit ma réponse était orientée sur votre phrase :
jchd a écrit :Le seul problème est que ce n'est pas Windows qui gère l'auto-repeat, mais le clavier lui-même.
qui est vraie sur le fond, mais qui fait abstraction de ma phrase précédente :
Tlem a écrit :je verrais bien un truc avec un appel de DLL Windows ou tout simplement l'utilisation des Windows Message Codes de la documentation.
bien que vous donniez une solution dans ce spoiler qui m'a été invisible. ;)

Re: [..] IsAutoRepeat()

Posté : dim. 30 mai 2010 00:27
par jchd
Désolé, c'est une erreur de mulot, que je prive illico de dessert pour une semaine.

Si cette fonction était gérée par Windows elle serait certainement implémentée au-dessus de la traduction clavier, ce qui rendrait les choses plus simples. Ceci dit, ce n'est pas d'un emploi si répandu donc on doit accepter ces contorsions.

Re: [..] IsAutoRepeat()

Posté : dim. 30 mai 2010 01:14
par Tlem
Il y a peut être une solution avec les Windows Messages, car suite à quelques recherches au sujet de cette question j' ai noté des choses étranges dans la documentation (voir mon sujet sur le forum Anglais) et cela m'a amener à lire ce lien http://msdn.microsoft.com/en-us/library ... 85%29.aspx .
On peut y lire les valeurs de retour du lParam et principalement les Bits 0-15. :roll:

Re: [..] IsAutoRepeat()

Posté : dim. 30 mai 2010 02:30
par jchd
"Bras de fer" avec Jean-Paul* : oui, j'ai vu !
Il n'a pas bien capté le problème : 0x0109 c'était WM_WNT_CONVERTREQUESTEX qui a disparu de MSDN.

Ah oui, c'est même certainement plus facile à gérer ainsi (avec WMC), car déja converti en Unicode. Par contre, j'ai déjà eu des soucis avec cette approche (séquence de composition Alt + 0xxx). J'avais répondu à côté de la plaque, ayant lu ta remarque trop vite ::ahem::.


* Tout est relatif bien sûr, c'est un charmant "vieillard".

Re: [..] IsAutoRepeat()

Posté : jeu. 03 juin 2010 00:28
par timmalos
Je ne veux pas interrompre cette conversation au combien interessante, mais je precise que Berthozero (qui m'a demandé de l'aide via MSN) demande cette information pour creer un keylogger.

Re: [..] IsAutoRepeat()

Posté : jeu. 03 juin 2010 00:48
par Tlem
Houuuuuu.
C'est pas bien. Image

Re: [..] IsAutoRepeat()

Posté : mar. 08 juin 2010 12:24
par berthozero
Merci de votre aide mais je n'arrive pas à me servir de WM_KEYDOWN Message, je l'avais deja vu mais je n'arrive pas à m'en servir :S