質問

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));
役に立ちましたか?

解決

これは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

他のヒント

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

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

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

http://www.codeproject.comにコードがあります。 /KB/cs/cswindowsmessages.aspx が便利です。多くの一般的なウィンドウメッセージのC#列挙を提供します。

インターネットで見つけたすべての例の中で、これは 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)); 

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top