문제

Windows SendMessage 메소드를 성공적으로 사용하여 텍스트 편집기에서 다양한 작업을 수행하는 데 도움이되었지만 다른 사람들이 제안한 코드를 복사하고 붙여 넣을 때마다 그 의미가 무엇인지 모르겠습니다. 매개 변수 인 비밀 메시지 번호는 항상 있습니다. 이 코드 번호가 실제로 무슨 뜻인지 알 수 있도록 어떻게 해야하는지 실제로 이해하고 (희망적으로) 미래에 조금 더 자급 자족이 될 수 있습니까? 감사.

Recent example:

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 Framework 아래에 사용하는 메시지 번호가 필요합니다.

특정 숫자가 실제로 의미하는 바를 찾는 가장 좋은 방법은 Windows SDK 헤더를보고 해당 숫자의 정의를 찾는 것입니다.

어쩌면 코드를 찾을 수 있습니다 http://www.codeproject.com/kb/cs/cswindowsmessages.aspx 유용한. 많은 일반적인 Windows 메시지의 C# 열거를 제공합니다.

내가 인터넷에서 찾은 모든 예들 중에서, 이것은 그것이 가장 좋은 것입니다. 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)); 

시험해보십시오 Pinvoke Interop Assistant. 이 도구에는 정의 된 모든 Windows 메시지를 탐색 할 수있는 검색 기능이 있습니다. 그런 다음 해당 값에 대한 올바른 C#/vb.net 코드를 생성합니다.

또한 일정한 값에만 국한되지 않습니다. 또한 스트러크, 기능, 기능 포인터 및 열거를 생성 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top