GetKeyboardState, un peut etrange...

Résolu
MiharbiDoNo Messages postés 150 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 25 mai 2012 - 23 janv. 2010 à 21:51
MiharbiDoNo Messages postés 150 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 25 mai 2012 - 24 janv. 2010 à 23:56
bonjour,
j'ai lus sous msdn que GetKeyboardState me donne l'etat de tous les touches (pressé ou nn), alors jvoulais essayé...



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Text = ""
        Dim b(255) As Byte
        GetKeyboardState(b)
        For i = 0 To 255
            If b(i) Then
                Label1.Text += i.ToString + "   " + DirectCast(i, Keys).ToString + vbNewLine
            End If
        Next
    End Sub



je touche pas au clavier, et je lance, je trouve sur ce label au moins 30 touche pressé, alors que le clavier n'est pas touché. puis j'ai essayé ce bout de code sous un timer, puis quand je tape une touche, elle n'est plus dans la liste. et si je tape est cette fenetre n'est pas active, rien ne change.

au final, elle sert a quoi cette fonction??
merci.
A voir également:

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 janv. 2010 à 23:33
en fait une touche n'est pas "enfoncée" ou "pas enfoncée", c'est un peu comme un bouton radio : il n'est pas coché avant que tu relache la souris ou clavier (pourtant tu vois la coche)

pas clair...

mieux! regarde la touche NUMLOCK
elle est soit activée, soit non.
pourtant tu n'as pas le doigt dessus tout le temps

beh c'est pareil avec toutes les touches

donc malgré ce code... pas jojo (), tes touches "pressées" ne sont pas celles avec tes doigts dessus, mais celle en état ON si tu préfères
ferme ton appli, appuie une fois sur les touches qui étaient ON, relance, elles seront à OFF


mais les images étant plus efficaces que les longs discours :




tu remarques qu'on obtient bien simultanément l'état de toutes les touches du clavier


++
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 janv. 2010 à 22:19
salut,

tu confonds GetKeyboardState et GetKeyState, dans ton utilisation du moins

ensuite tu n'as pas besoin de caster sur KEYS (byte vers byte ??)
vbNewLine c'est du VB6
concaténation de chaines, pas +=
string.concat, string.forme, &=, etc
pis sans CLEAR, que pourrait on voir

quels autres tests as-tu fait??


[hr]
0
MiharbiDoNo Messages postés 150 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 25 mai 2012
24 janv. 2010 à 11:18
merci, j'arrive a mieu comprendre.
vbnewlive = VbCrLf (retour a la ligne, pour vb6 et .net)
caster du byte i vers keys, pour avoir le nom du clé string, de 65 vers "A".
pour la concatenation, & et + sont les meme.
et puisque tous les affichage sont sur un label,
label.text = "" va effacer tous, au lieu de clear ^^

merci j'ai compris la difference entre getkeystate et getkeyboardstate.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 janv. 2010 à 12:01
au lieu de reprendre bêtement mes remarques (sensées être constructives) en bloc pour dire "non j'ai raison", tu pourrais t'y attarder un instant quand même !

vbnewlive = VbCrLf (retour a la ligne, pour vb6 et .net)

NON!! VBNEWLINE est aussi du VB6
en vb.net c'est Environment.NewLine
décoche les références à MS.VB pour mieux comprendre !




caster du byte i vers keys, pour avoir le nom du clé string, de 65 vers "A"

justement NON!! on ne fait pas un CAST numérique vers numérique, c'est un CONVERT.TOCHAR ici



pour la concatenation, & et + sont les meme

dans quel monde?
option strict ON, on verra si c'est le même...
+ est opérateur mathématique, il y a une addition dans "a" & "b" ?... NON



label.text = "" va effacer tous, au lieu de clear ^^

justement je disais que tu ne l'effaçais pas, du moins dans la portion de code que tu montrais. difficile de bien voir l'état des touches alors.
de plus dans ce cas on préfèrera Label1.Text = String.Empty


un peu moins d'arrogance envers les personnes qui essayent d'aider STP, serait plus que bienvenue !


[hr]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MiharbiDoNo Messages postés 150 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 25 mai 2012
24 janv. 2010 à 20:22
je m'excuse si j'été mal compris. j'voulais pas pas repondre comme ça, vulgairement, c'est juste des explication, qui decrit mes but, avec mes modestes connaissances. je te remrcie pour tes remarques,vrament apprecié.

juste une petite chose, "a" + "b" reste fonctionnel même avec Strict On. avec & ça marche aussi ^^

et oui ms.vb c'est du vb6, vrai, mais c'est classé dans les bibliotheque .net, alors on peut les utilisé ^^

je m'excuse encore pour le derangement et @+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 janv. 2010 à 20:50
ok, alors je reprends quand même :

le + fonctionne
mais on utile &

ce n'est pas que VB6 et VB.NET sont permissifs!!, c'est que le "+" est accepté en tant qu'opérateur de concaténation de STRING dans le sens où UN TEST EST EFFECTUé AVANT :
si c'est 2 STRING, le compilo va transformer ton code

SEULEMENT c'est une mauvaise habitude car du fait on peut en arriver à faire un "+" entre un STRING et un NUMERIQUE

pas de problème de compilation = > plus dur pour trouver le bug!

donc on retient "+" = opérateur mathématique et on code proprement!!
donc on BANNI le "+" pour la concaténation, même si VS le supporte dans certains cas


[quote=MSDN]
Différences entre les deux opérateurs de concaténation

L'+, opérateur (Visual Basic) a pour objectif principal d'ajouter deux nombres. Toutefois, il peut également concaténer des opérandes numériques avec des opérandes de chaîne. L'opérateur + a un jeu de règles complexes qui déterminent s'il faut ajouter, concaténer, signaler une erreur du compilateur ou lever une exception InvalidCastException au moment de l'exécution.

L'opérateur &, opérateur (Visual Basic) n'est défini que pour des opérandes String et étend toujours l'opérande associé au type String, quelle que soit la valeur de Option Strict. L'opérateur & est recommandé pour la concaténation de chaînes, car il est défini exclusivement pour les chaînes et il réduit le risque de générer une conversion inattendue.
/quote

[HR]

[quote =MiharbiDoNo]mais c'est classé dans les bibliotheque .net, alors on peut les utilisé/quote
NON, c'est pour aider à la migration uniquement! pour çà que c'est coché par défaut

lance ton exe sous vista/seven, tu verras la différence d'interface d'une FORM+TEXTBOX+BUTTON et celle d'une inputbox

c'est pas fait pour être distribué, juste pour aider à "débuter" pour les devs venant de vb6.

or quand on veut coder avec autre chose que ses pieds, on commence par apprendre le langage.
VB.NET n'est pas VB6, il faut bien se l'ancrer! de là, on désactive ces références "bébé" pour se forcer!

sinon tu mets tout à OFF, tu ne déclares rien, tu ne détruis rien, tu coches toutes les références et au petit bonheur la chance...

"tu" c'est générique bien sûr, ne te sens pas spécialement visé
(du moins pas uniquement ^^)

y'a des choix à faire

fin de la plaidoirie, bonne continuation
0
MiharbiDoNo Messages postés 150 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 25 mai 2012
24 janv. 2010 à 23:56
hum... ouey cet inputbox est - j'arrive à dire - horrible devant l'animation du w7 par exemple.
t'as raison, j'ai remarqué que ya plein de remarque sur les ancien fonction vb6 (function .... The my Features gives better performance...)

une trés bonne idée, j'ai decoché la namespace vb, et voir comment je me debrouille^^

en effet j'ai pas vraiment besoin de getkeyboardstate, (j'été en passage sur msdn quand jla trouvé) mais je suis reconnaissant d'avoir poster la question, car j'ai appri de nouveau truk. merci et bonne journée.
0
Rejoignez-nous