14

Windows SendMessage メソッドを使用して、テキスト エディターでさまざまなことを実行することに成功しましたが、毎回、他の人が提案したコードをコピーして貼り付けているだけで、それが何を意味するのかよくわかりません。パラメータである不可解なメッセージ番号が常に存在します。これらのコード番号が何を意味するのかを知るにはどうすればよいのでしょうか?実際に何が起こっているのかを理解し、(願わくば)将来はもう少し自給自足できるようにするにはどうすればよいでしょうか? ありがとう。

最近の例:

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

5 に答える 5

3

これは、Windows メッセージ コードです。
それらはヘッダー ファイルで定義されており、さまざまな言語のインクルードとして一般的に利用可能です。

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

http://msdn.microsoft.com/en-us/library/ms644927(VS.85).aspx#windows_messagesを参照して ください。

于 2008-10-15T20:19:46.210 に答える
3

Windows の各メッセージは番号で示されます。ネイティブ コードで Windows SDK を使用してコーディングする場合、これらは WM_CHAR、WM_PAINT、または LVM_GETCOUNT などの定義によって提供されますが、ほとんどの場合、メッセージは .NET イベントによってラップされるため、これらの定義は .NET フレームワークに引き継がれません。 OnKeyPressed や OnPaint など、または ListView.Items.Count などのメソッドやプロパティです。

ラップされたイベント、プロパティ、またはメソッドがない場合、または上位レベルでサポートされていないことを行う必要がある場合は、Windows が .NET フレームワークの下で使用するメッセージ番号が必要です。

特定の数値が実際に何を意味するかを調べる最善の方法は、Windows SDK ヘッダーを調べて、その数値の定義を見つけることです。

于 2008-10-15T20:19:48.783 に答える
2

http://www.codeproject.com/KB/cs/cswindowsmessages.aspxのコードが役に立つかもしれません。多くの一般的な Windows メッセージの C# 列挙を提供します。

于 2010-01-22T03:56:48.283 に答える
1

インターネットで見つけたすべての例の中で、using System.Runtime.InteropServices. このディレクティブがなければ、C# で SendMessage を動作させることができませんでした。また、このページが提供する Windows メッセージのリストも非常に役立ちます。ここで例を繰り返します。

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)); 
于 2010-03-22T18:06:49.207 に答える
0

PInvoke interop Assistantを試してみてください。このツールには、定義されたすべての Windows メッセージを参照できる検索機能があります。次に、それらの値に対して正しい C#/VB.Net コードを生成します。

また、定数値だけに限定されません。また、構造体、関数、関数ポインター、および列挙型を生成することもできます。

于 2008-10-16T17:29:19.470 に答える