Question

En tant qu'amateur à quoi que ce soit inférieur à VB / VBS (C ++ WINAPI est un cauchemar pour quelqu'un de mon expérience) Je ne sais pas comment s'y prendre pour construire long lParam pour un simple message KEYDOWN en C ++ et ont probablement passé plus de temps à la recherche d'une explication décente que vaut la peine, serait quelqu'un en mesure de décrire exactement comment aller à ce sujet?

Il semble que presque toutes les réponses à cette question dans d'autres forums a été « pourquoi » ou « utiliser SendInput à la place », sans répondre effectivement à la question; Je devine que c'est beaucoup trop élémentaire pour les gens à expliquer. Quoi qu'il en soit, voici la description de msdn, apprécierions beaucoup une explication décente ou un lien vers un, et un exemple travaillé si possible:

  

Le nombre de répétitions, le code de balayage,   drapeau-clé étendue, le code de contexte,   précédent drapeau clé état, et   drapeau d'état de transition, comme le montre ...

     

0-15 Le nombre de répétitions du courant   message. La valeur est le nombre de   fois la combinaison de touches est autorepeated comme   à la suite de l'utilisateur en maintenant la   clé. Si la combinaison de touches est de longue date   assez, plusieurs messages sont envoyés.   Cependant, le nombre de répétitions est pas   cumulatif. 16-23 Le code d'analyse. le   la valeur dépend de l'OEM.

     

24 Indique si la clé est un   clé étendue, comme la droite   touches ALT et CTRL qui apparaissent sur un   amélioré 101- ou un clavier 102 touches. le   La valeur est 1 si elle est une clé étendue;   , Il en est autrement 0. 25-28 Réservé faire   pas utiliser

     

29 Le code de contexte. La valeur est 1 si   la touche ALT est en baisse alors que la clé est   pressé; il est 0 si le WM_SYSKEYDOWN   message est affiché à la fenêtre active   car aucune fenêtre n'a le clavier   mise au point.

     

30 L'état clé précédente. La valeur   est 1 si la touche est enfoncée avant la   message est envoyé, ou il est 0 si la clé   est en place.

     

31 L'état de transition. La valeur est   toujours 0 pour un message WM_SYSKEYDOWN.

Était-ce utile?

La solution

De l'explication de lParam paramètre du message de WM_KEYDOWN et Drapeaux message Keystroke chapitre, je voudrais écrire le code suivant pour faire face à la valeur de lParam :

  iRepeatCount   := LOWORD(lParam);
  iScanCode      := HIWORD(lParam) and $FF;
  iExtendedKey   := (HIWORD(lParam) and KF_EXTENDED) shr 8;
  iContextCode   := (HIWORD(lParam) and KF_ALTDOWN) shr 13;
  iPreviousState := (HIWORD(lParam) and KF_REPEAT) shr 14;
  iKeyDown       := (HIWORD(lParam) and KF_UP) shr 15;

Bien qu'il soit mise en œuvre Delphi, je suis sûr que vous pouvez comprendre un tel code simple. : -)

OK, pour votre commodité, je Google pour enseignement équivalent de shr en VB, et je reçois ceci:

  Private Function SHL(ByVal inVal As Long, ByVal inShift As Byte) As Long
     SHL = inVal * (2 ^ inShift) ' Bit shift left
  End Function

  Private Function SHR(ByVal inVal As Long, ByVal inShift As Byte) As Long
     SHR = inVal \ (2 ^ inShift) ' Bit shift right
  End Function

Pour imiter le LOWORD et HIWORD en VB, consultez Comment Mimic HIWORD, LOWORD, HIBYTE, LOBYTE C Macros dans VB .

Autres conseils

http://msdn.microsoft.com/en -us / bibliothèque / ms646280 (VS.85) .aspx

Le lparam est une valeur de 32 bits; chaque bit contrôle un aspect différent du message WM_KEYDOWN. Pour remplir correctement le lparam, vous pouvez essayer d'utiliser espion ++ pour voir ce réel des messages WM_KEYDOWN ressemblent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top