티스토리 뷰

전공/C#

C# SendMessage string 전달

무한공백 2015. 7. 6. 17:03


서로 다른 프로그램으로 데이터를 전달하기 위해선 아래와 같이 하면 된다.


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 함수에서 파싱해도 되고.

굉장히 편리하다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함