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 !
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.
$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.
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.
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <WinAPI.au3>
;~ #include <WindowsConstants.au3>
;~ #include <StructureConstants.au3>
Opt('MustDeclareVars', 1)
Global $hHook, $hStub_KeyProc, $kbKey, $kbCount
_Main()
Func _Main()
OnAutoItExitRegister("Cleanup")
Local $hmod
$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hmod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD, DllCallbackGetPtr($hStub_KeyProc), $hmod)
InputBox("Hook test", "Utilisez le clavier avec ou sans auto-repeat")
EndFunc ;==>_Main
Func _Exit()
Exit
EndFunc
;===========================================================
; callback function
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
Local $vkey = BitShift(BitAND($lParam, 0x00FF0000), 16)
If BitAND($lParam, 0xC0000000) = 0 Then
ConsoleWrite('Touche ' & Hex($wParam, 4) & ' ')
Switch $wParam
Case 0x20, 0x30 To 0x39, 0x41 To 0x5A
ConsoleWrite(Chr($wParam))
Case Else
ConsoleWrite(' ')
EndSwitch
$kbKey = $vkey
$kbCount = 0
Else
If BitAND($lParam, 0x40000000) Then
$kbCount += 1
EndIf
If BitAND($lParam, 0x80000000) Then
If $kbCount > 1 Then
ConsoleWrite(@TAB & $kbCount & ' fois' & @LF)
Else
ConsoleWrite(@LF)
EndIf
EndIf
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func Cleanup()
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
EndFunc ;==>Cleanup
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
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 ...
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.
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
[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.
[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.
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
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.
"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".
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
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.