[C #] [API Win32] PostMessage aide?
-
01-10-2019 - |
Question
Je l'ai regardé sur les sites et la documentation MSDN, mais je ne comprends toujours pas le dernier paramètre de PostMessage ().
Sur les forums où les gens demandent comment utiliser PostMessage, les gens répondent à l'une des deux implémentations:
- PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, MapVirtualKey (KeyCode, 0) << 16);
- PostMessage (WindowHandle, WM_KEYDOWN, KeyCode, 0);
Quelle est la différence? Pourquoi le dernier paramètre est laissé à 0, dans certains cas, mais doit être « déplacé » et tout ce qui dans d'autres cas?
Juste une petite question. Ne pas besoin de réponses d'essai (bien qu'ils seraient très appréciés). Toute idée est appréciée. Merci à l'avance.
La solution
Voir pour plus d'informations sur PostMessage. Chaque message est différent et a ses propres spécifications quant à ce que les paramètres sont nécessaires. À bien des égards, vous pouvez la voir en fonction générale avec un nom (message après) que les délégués à une autre fonction (le nom du message) et transmet ces paramètres.
Le dernier paramètre comme le reste sont un message spécifique et peut varier.
BOOL PostMessage(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam
);
Dans votre premier message WM_KEYDOWN a besoin du résultat de MapVirtualKey en lParam que dans les 16 bits de poids fort. Je ne suis pas familliar avec ce message plus, mais je pense que ce qui se passe est que, puisque 0 est transmis comme second paramètre, il n'y a pas de clé virtuelle code de balayage (ou vice versa) traduction requise, mais le code d'activation est toujours nécessaire dans les 16 bits supérieurs de lParam