728x90

C언어에서 sendMessage()함수를 사용하는 것처럼 C#에서도 구현하고 싶은데 이것이 또 그냥 되지는 않더라.


[DllImport("coredll.dll", CharSet = CharSet.Auto)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

이런 식으로 함수원형을 선언했다.

이렇게 구현하여 보내는 Message는 WndProc함수를 이용하여 확인할 수 있는데 .net framework에서는 Form class에서 지원하지만  compactframework에서는 사용할 수 없다.

MessageWindow를 이용하여 우회적으로 사용할 수는 있다.

protected override void WndProc(ref Message msg)
        {
            switch (msg.Msg)
            {
                case (MSG.Message1):
                    Console.WriteLine("Message1");
                    Program.mainform.Function1();
                    break;
                case (MSG.Message2):
                    Console.WriteLine("in WndProc Message2");
                    switch (MSG.WParam.ToInt32())
                    {
                        case START:
                            if (Program.mainform.CLI_Flag == true)
                            {
                                Program.mainform.AbortThread();
                            }
                            Program.mainform.g_bStop = true;
                            break;
                        case PAUSE:
                            break;
                        case RESTART:
                            break;
                        case END:
                            Console.WriteLine("END");
                            if (Program.mainform.CLI_Flag == true)
                            {
                                Program.mainform.CreateThread();
                            }
                            break;
                        case ERROR:
                            break;
                    }                    
                    //Do something here
                    break;
            }

            // call the base class WndProc for default message handling
            base.WndProc(ref msg);
        }
    }

다음은 message를 보내는 부분이다
SendMessage(winproc.Hwnd, MSG.Message1, IntPtr.Zero, IntPtr.Zero);

핸들러를 IntPtr형식으로 주게되면 dll에서 메시지를 보내는 것도 동일하게 받아올 수 있다.

728x90

+ Recent posts