Question

J'ai utilisé avec succès la méthode Windows SendMessage pour m'aider à effectuer diverses tâches dans mon éditeur de texte, mais chaque fois, je ne fais que copier-coller du code suggéré par d'autres personnes, sans que je sache vraiment ce que cela signifie. Il y a toujours un numéro de message crypté qui est un paramètre. Comment savoir ce que signifient ces numéros de code pour que je puisse réellement comprendre ce qui se passe et (espérons-le) être un peu plus autonome à l'avenir? Merci.

Exemple récent:

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam);

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1));
Était-ce utile?

La solution

Il s'agit du code de message Windows.
Ils sont définis dans les fichiers d'en-tête et généralement disponibles traduits comme une sorte d'inclusion avec différentes langues.

exemple:
WM_MOUSEMOVE = & amp; H200
MK_CONTROL = & amp; H8
MK_LBUTTON = & H1
MK_MBUTTON = & amp; H10
MK_RBUTTON = & H2
MK_SHIFT = & H4
MK_XBUTTON1 = & H20
MK_XBUTTON2 = & H40

voir http://msdn.microsoft .com / fr-us / library / ms644927 (VS.85) .aspx # windows_messages .

Autres conseils

Chaque message dans Windows est signalé par un numéro. Lors du codage à l'aide du Kit de développement logiciel (SDK) Windows en code natif, ceux-ci sont fournis par des définitions telles que WM_CHAR, WM_PAINT ou LVM_GETCOUNT, mais ces définitions ne sont pas transférées vers le framework .NET car, dans la plupart des cas, les messages sont encapsulés par des événements .NET. comme OnKeyPressed et OnPaint, ou des méthodes et propriétés comme ListView.Items.Count.

Lorsqu’il n’ya pas d’événement, de propriété ou de méthode encapsulé, ou que vous devez effectuer quelque chose qui n’est pas pris en charge au niveau supérieur, vous avez besoin des numéros de message que Windows utilise sous le framework .NET.

Le meilleur moyen de déterminer la signification réelle d'un numéro consiste à rechercher dans les en-têtes du SDK Windows et à trouver la définition de ce numéro.

Vous trouverez peut-être le code à l'adresse http://www.codeproject.com /KB/cs/cswindowsmessages.aspx utile. Il fournit une énumération C # de nombreux messages Windows courants.

Parmi tous les exemples que j'ai trouvés sur Internet, celui-ci est le meilleur car c'est le seul qui se charge d'afficher le à l'aide de System.Runtime.InteropServices . Sans cette directive, SendMessage ne pourrait pas fonctionner en c #. La liste des messages Windows proposés par cette page est également très utile. Ici, je répète l'exemple:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam); 

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1)); 

Essayez l'Assistant PInvoke interop . Cet outil a une fonctionnalité de recherche qui vous permet de parcourir tous les messages Windows définis. Il générera ensuite le code C # / VB.Net correct pour ces valeurs.

Cela ne se limite pas à des valeurs constantes. Il peut également générer des structures, des fonctions, des pointeurs et des énumérations.

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