Frage

Ich habe erfolgreich die Windows-Methode Sendmessage mir verschiedene Dinge in meinem Text-Editor zu helfen, aber jedes Mal, wenn ich gerade bin Kopieren und Einfügen von Code von anderen vorgeschlagen, und ich weiß nicht wirklich, was es bedeutet. Es gibt immer eine kryptische Nachricht Zahl, die ein Parameter ist. Wie kann ich wissen, was diese Codenummern bedeuten, so dass ich wirklich verstehen, was passiert ist und (hoffentlich) auch in Zukunft ein wenig mehr autark sein? Danke.

Jüngstes Beispiel:

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));
War es hilfreich?

Lösung

Dies ist der Windows-Nachrichtencode.
Sie werden in den Header-Dateien definiert und verfügbar allgemein übersetzt als mit verschiedenen Sprachen irgendeine Art enthalten.

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

finden Sie unter http://msdn.microsoft .com / de-de / library / ms644927 (VS.85) aspx # windows_messages .

Andere Tipps

Jede Nachricht in Windows wird durch eine Zahl bezeichnet. Bei der Codierung des Windows SDK in nativen Code verwenden, werden diese durch definiert zur Verfügung gestellt, wie WM_CHAR, WM_PAINT oder LVM_GETCOUNT, aber diese definiert sind nicht mit dem .NET-Framework übernommen, weil in den meisten Fällen, die Nachrichten von .NET Ereignisse eingewickelt wie OnKeyPressed und OnPaint oder die Methoden und Eigenschaften wie ListView.Items.Count.

Anlässlich wo es kein Ereignis, das Eigentum oder Methode gewickelt ist, oder Sie brauchen, um etwas zu tun, die nicht auf der höheren Ebene unterstützt wird, müssen Sie die Nachrichtennummern, das Windows unter dem .NET Framework verwendet.

Der beste Weg, um herauszufinden, was eine bestimmte Zahl bedeutet, tatsächlich ist in den Windows SDK-Header zu suchen und die Definition für diese Nummer finden.

Vielleicht werden Sie den Code unter http://www.codeproject.com /KB/cs/cswindowsmessages.aspx nützlich. Es bietet eine C # Auszählung von vielen gängigen Windows-Nachrichten.

Unter allen Beispielen, die ich im Internet gefunden, das ist eine der besten, weil es das einzige ist, die Sorgfalt auf die using System.Runtime.InteropServices zeigen. Ohne diese Richtlinie könnte ich nicht haben Sendmessage in c # arbeiten. Ebenfalls sehr hilfreich ist die Liste der Windows-Nachrichten auf dieser Seite bieten. Hier habe ich das Beispiel wiederholen:

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)); 

Nutzen Sie den PInvoke Interop-Assistent . Dieses Tool verfügt über eine Suchfunktion, die Sie durch alle definierten Windows-Nachrichten durchsuchen können. Es wird dann erzeugt den richtigen C # / VB.Net Code für diese Werte.

Es ist auch nicht nur auf konstante Werte beschränkt. Es kann auch Strukturen, Funktionen, Funktionszeiger und Aufzählungen erzeugt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top