IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Detection des touches enfoncées par API [Trucs & Astuces]


Sujet :

VB 6 et antérieur

  1. #21
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Va voir ICI

    Profites-en pour télécharger API-Guide LA
    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

  2. #22
    Membre régulier Avatar de moaleboss
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 16
    Points : 75
    Points
    75
    Par défaut
    Merci Thierry AIM, je teste ca, et je vous tiens au courant
    C'est pas difficile... suffisait simplement d'y penser

  3. #23
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    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

  4. #24
    En attente de confirmation mail
    Inscrit en
    Mai 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    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:
    Citation Envoyé par DarkVader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
    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...

    Vous moquez pas svp, et aidez moi

    Merci d'avance!!!
    Frédéric

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2002
    Messages : 120
    Points : 89
    Points
    89
    Par défaut De passage ici ...
    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

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    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.

  7. #27
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par Gothico
    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 ;
    l'autre voie consiste à surveiller l'application ou la form active.

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par DarkVader
    On ne désactive pas getasynchkeystate mais le timer sous jacent qui utilise la fonction
    Oui, en effet, c'est une idée, merci
    Mais lorsque que je le réactive, malheureusement toutes les touches qui on été mémorisées resorte à ce moment la....

  9. #29
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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.

    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
    Placé dans le bouton "Quitter" de l'userform, ArrêterTimer n'agit pas (?)
    Dans l'userform, j'ai ça :

    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
    J'ai une question pour Dark : Peut-on tester la touche microsoft ? Je n'ai pas vu de correspondance dans la liste

    Merci

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Tu peux m'expliquer vite fais le principe, j'ai un peu de mal la
    Merci

  11. #31
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu peux m'expliquer vite fais
    Si c'est à moi que tu poses la question... j'ai mis quelques temps à le comprendre... Dark en est témoin...
    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+

  12. #32
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Points : 40
    Points
    40
    Par défaut
    Oui, c'est bien à toi que je demandais ca
    Je vois un peu mieux ce que tu fais 8)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Etat des touches enfoncé vérifié trop rapidement
    Par Takumi dans le forum XNA/Monogame
    Réponses: 7
    Dernier message: 29/10/2010, 09h10
  2. Réponses: 14
    Dernier message: 27/02/2009, 19h18
  3. Format des dates par API Crystal XI
    Par Gerard_38000 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/11/2007, 14h39
  4. Detection des touches webform
    Par dupuisj dans le forum C#
    Réponses: 1
    Dernier message: 06/06/2007, 23h29
  5. [VB6] capture de touche par API
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/11/2003, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo