GetKeyboardState, un peut etrange... [Résolu]

Messages postés
150
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
25 mai 2012
- 23 janv. 2010 à 21:51 - Dernière réponse :
Messages postés
150
Date d'inscription
dimanche 17 mai 2009
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.
Afficher la suite 
A voir également:

Votre réponse

7 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 23 janv. 2010 à 23:33
3
Merci
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


++

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 23 janv. 2010 à 22:19
0
Merci
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]
Commenter la réponse de PCPT
Messages postés
150
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
25 mai 2012
- 24 janv. 2010 à 11:18
0
Merci
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.
Commenter la réponse de MiharbiDoNo
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 24 janv. 2010 à 12:01
0
Merci
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]
Commenter la réponse de PCPT
Messages postés
150
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
25 mai 2012
- 24 janv. 2010 à 20:22
0
Merci
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 @+
Commenter la réponse de MiharbiDoNo
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 24 janv. 2010 à 20:50
0
Merci
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
Commenter la réponse de PCPT
Messages postés
150
Date d'inscription
dimanche 17 mai 2009
Dernière intervention
25 mai 2012
- 24 janv. 2010 à 23:56
0
Merci
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.
Commenter la réponse de MiharbiDoNo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.