티스토리 뷰
서로 다른 프로그램으로 데이터를 전달하기 위해선 아래와 같이 하면 된다.
1. WM_COPYDATA 와 COPYDATASTRUCT 를 이용할 수 있도록 선언한다.
using System.Runtime.InteropServices; ... ... public const Int32 WM_COPYDATA = 0x004A; public struct COPYDATASTRUCT { public IntPtr dwData; public UInt32 cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpData; } [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, ref COPYDATASTRUCT lParam);
2. 데이터를 sendMessage로 넣는다.
byte[] buff = System.Text.Encoding.Default.GetBytes(strTextData); COPYDATASTRUCT cds = new COPYDATASTRUCT(); cds.dwData = IntPtr.Zero; cds.cbData = (uint)(buff.Length + 1); //buff size cds.lpData = strTextData; //msg string data SendMessage(OtherProc, WM_COPYDATA, IntPtr.Zero, ref cds);
3. 데이터를 받을 장소에서 WndProc 함수를 오버라이드 한다.
protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == WM_COPYDATA) { COPYDATASTRUCT cds = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); //strData = cds.lpData; 받을 데이터를 설정. } base.WndProc(ref m); } //WndProc
위와 같이 하면 간단히 통신할 수 있다.
string에 여러 데이터를 묶어 보내고, 나중에 WndProc 함수에서 파싱해도 되고.
굉장히 편리하다.
'전공 > C#' 카테고리의 다른 글
Winform 마우스 이벤트를 받지 않는 컨트롤 만들기, Winform IsHitTestVisible (0) | 2015.08.07 |
---|---|
c# 익스플로러 툴바 만들기(1) (0) | 2015.07.10 |
윈폼에서 SHDocVw 참조, 익스플로러 제어 (0) | 2015.07.09 |
Regasm, warning RA0000: No types were registered (0) | 2015.07.09 |
WMI를 이용한 원격 컴퓨터 하드(HDD) 용량 확인. (3) | 2015.04.28 |
댓글