Vous vous posez une question, la réponse est peut-être ici :
Toutes les FAQs VB
Les Cours et Tutoriels VB6/VBScript
Les Sources VB6
Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension
Merci Thierry AIM, je teste ca, et je vous tiens au courant
C'est pas difficile... suffisait simplement d'y penser
ben la fonction hook du clavier là chez pu le nom, j'ai testé et ça marche que quand la fenetre du prog est active
Bonjour!!
j'ai lu tout vos messages et ça m'a bien intéressé... toutefois je suis un peu mauvais (eh oui encore...) en vb et j'aimerais savoir, tout simplement ou est ce qu'il faut placer la ligne suivante dans la page de code:
Tout en haut avec les déclarations? parce que visiblement où que je la mette vb n'est pas tres content de la voir où elle est...Envoyé par DarkVader
Vous moquez pas svp, et aidez moi
Merci d'avance!!!
Frédéric
On dirait qu'on a oublié de te répondre là. Avec un mois de retard je te répond.
Il faut le mettre dans un module.
"En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche."
Les Shadocks
Bonjour, je voudrais savoir s'il est possible d'annuler "GetAsyncKeyState", car si l'utilisateur a, par exemple, rempli un textbox sur ma form_MAIN et que je lance une autre form après : toutes les touches qu'il a appuiées sont détectées quand même....
(je voudrais donc faire une fontion qui annule les touches appuyées dans le form_load)
Merci.
On ne désactive pas getasynchkeystate mais le timer sous jacent qui utilise la fonction ;Envoyé par Gothico
l'autre voie consiste à surveiller l'application ou la form active.
Oui, en effet, c'est une idée, merciEnvoyé par DarkVader
Mais lorsque que je le réactive, malheureusement toutes les touches qui on été mémorisées resorte à ce moment la....
Il y a quelques temps et, sur les conseils éclairés de Dark, j'ai fait ça qui ne paraît pas gourmand en temps d'utilisation du µp.
Placé dans le bouton "Quitter" de l'userform, ArrêterTimer n'agit pas (?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 Public ghwnd As Long, kHwnd As Long, uId As Long, fin As Boolean Declare Function SetTimer Lib "user32" (ByVal ghwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" (ByVal kHwnd As Long, ByVal nIDEvent As Long) As Long Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub OpenTheForm() Load UserForm1 UserForm1.Show ArrêterTimer End Sub Sub GetPressedKey() Dim ok(12) As Boolean, j As Integer, i As Integer touche = Array("", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12") ok(1) = GetAsyncKeyState(112) <> 0 ok(2) = GetAsyncKeyState(113) <> 0 ok(3) = GetAsyncKeyState(114) <> 0 ok(4) = GetAsyncKeyState(115) <> 0 ok(5) = GetAsyncKeyState(116) <> 0 ok(6) = GetAsyncKeyState(117) <> 0 ok(7) = GetAsyncKeyState(118) <> 0 ok(8) = GetAsyncKeyState(119) <> 0 ok(9) = GetAsyncKeyState(120) <> 0 ok(10) = GetAsyncKeyState(121) <> 0 ok(11) = GetAsyncKeyState(122) <> 0 ok(12) = GetAsyncKeyState(123) <> 0 Sleep 100 'ok(0) = ok(1) Or ok(2) Or ok(3) Or ok(4) Or ok(5) Or ok(6) Or ok(7) Or ok(8) Or ok(9) Or ok(10) Or ok(11) Or ok(12) ok(0) = ok(1) + ok(2) + ok(3) + ok(4) + ok(5) + ok(6) + ok(7) + ok(8) + ok(9) + ok(10) + ok(11) + ok(12) If ok(0) Then For i = 1 To 12 If ok(i) Then For j = 1 To 3 Beep Next j UserForm1.Label1.Caption = "Touche frappée : " & touche(i) Exit For End If Next End If End Sub Sub ArrêterTimer() KillTimer kHwnd, uId End Sub
Dans l'userform, j'ai ça :
J'ai une question pour Dark : Peut-on tester la touche microsoft ? Je n'ai pas vu de correspondance dans la liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Private Declare Function GetCurrentVbaProject Lib "vba332.dll" Alias "EbGetExecutingProj" (hProject As Long) As Long Private Declare Function GetFuncID Lib "vba332.dll" Alias "TipGetFunctionId" (ByVal hProject As Long, ByVal strFunctionName As String, ByRef strFunctionID As String) As Long Private Declare Function GetAddr Lib "vba332.dll" Alias "TipGetLpfnOfFunctionId" (ByVal hProject As Long, ByVal strFunctionID As String, ByRef lpfn As Long) As Long Private Sub UserForm_Activate() If Val(Application.Version) < 9 Then uId = SetTimer(ghwnd, 0, 1, AddressOf97("GetPressedKey")) Else 'SetTimer ghwnd, 0, 1, AddressOf GetPressedKey End If End Sub Function AddressOf97(sFunctionName As String) As Long Dim lResult As Long, lCurrentVBProject As Long, sFunctionID As String, lAddressOfFunction As Long, sFunctionUniCode As String sFunctionUniCode = StrConv(sFunctionName, vbUnicode) If GetCurrentVbaProject(lCurrentVBProject) <> 0 Then lResult = GetFuncID(lCurrentVBProject, sFunctionUniCode, sFunctionID) If lResult = 0 Then lResult = GetAddr(lCurrentVBProject, sFunctionID, lAddressOfFunction) If lResult = 0 Then AddressOf97 = lAddressOfFunction End If End If End Function Private Sub BoutonQuitter_Click() Unload UserForm1 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Cancel = 0 End Sub
Merci
Tu peux m'expliquer vite fais le principe, j'ai un peu de mal la
Merci
Si c'est à moi que tu poses la question... j'ai mis quelques temps à le comprendre... Dark en est témoin...Tu peux m'expliquer vite fais
Le principe : tester, dans un form, la touche (ici F1->F12) frappée sur le clavier par l'utilisateur. Je crée donc un tableau des touches qui m'intéressent et un tableau de booléens pour identifier la touche frappée.
Tu parles d'autre chose ? Tu t'adresses à quelqu'un d'autre ?
A+
Oui, c'est bien à toi que je demandais ca
Je vois un peu mieux ce que tu fais 8)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager