예제 #1
0
        protected override void WndProc(ref Message m)
        {
            try
            {
                switch (m.Msg)
                {
                case Win32API.WM_COPYDATA:
                    Win32API.COPYDATASTRUCT cds = (Win32API.COPYDATASTRUCT)m.GetLParam(typeof(Win32API.COPYDATASTRUCT));
                    AddText(MSGVIEW.Process, "EXE로 부터 받은 데이터 : " + cds.lpData);
                    //Do Work...

                    string receiveString = cds.lpData;
                    WinMessage_ClientToServer receiveData;
                    Json.ToObject(receiveString, out receiveData);

                    //Todo. Token 없을때 처리

                    //WEB_EXE_TranseToken
                    HY_AjaxAgent.TokenData token = WEB_EXE_TranseTokens[receiveData.PROCESS_KIND];

                    receiveFromEXE(receiveData, token);

                    break;
                }
                base.WndProc(ref m);
            }
            catch (Exception ex)
            {
                Log.Instance.Error(string.Format("WndProc Error! Msg : {0}", ex.Message));
            }
        }
예제 #2
0
        public void SendToServer(string strText)
        {
            IntPtr        hwnd        = IntPtr.Zero;
            List <IntPtr> listHandles = GetChildWindows(IntPtr.Zero);

            foreach (IntPtr each in listHandles)
            {
                const int     nChars = 256;
                StringBuilder Buff   = new StringBuilder(nChars);

                if (GetWindowText(each, Buff, nChars) > 0)
                {
                    const string strServerName = "GameServer [";
                    int          nRes          = String.Compare(Buff.ToString(), 0, strServerName, 0, strServerName.Length);
                    if (nRes == 0)
                    {
                        hwnd = each;
                        break;
                    }
                }
            }

            if (hwnd == IntPtr.Zero)
            {
                return;
            }

            Win32API.COPYDATASTRUCT cds = new Win32API.COPYDATASTRUCT();
            cds.dwData = (IntPtr)1001;
            cds.cbData = Encoding.Default.GetBytes(strText).Length + 1;
            cds.lpData = strText;
            SendMessage(hwnd, Win32API.WM_COPYDATA, IntPtr.Zero, ref cds);
        }
예제 #3
0
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case Win32API.WM_COPYDATA:
                Win32API.COPYDATASTRUCT cDataStruct = new Win32API.COPYDATASTRUCT();
                cDataStruct = (Win32API.COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(Win32API.COPYDATASTRUCT));

                ParseXML(cDataStruct.lpData);

                break;

            default:
                break;
            }
            base.WndProc(ref m);
        }
예제 #4
0
        public bool SendMessage(int code, string msg)
        {
            String caption = overlayCaption;
            IntPtr hwnd    = FindWindow(null, caption);

            if (hwnd != IntPtr.Zero)
            {
                Win32API.COPYDATASTRUCT cds = new Win32API.COPYDATASTRUCT();
                cds.dwData = new IntPtr(code);
                byte[] buff = Encoding.UTF8.GetBytes(msg);
                cds.lpData = Marshal.AllocHGlobal(buff.Length);
                Marshal.Copy(buff, 0, cds.lpData, buff.Length);
                cds.cbData = buff.Length;
                SendMessage(hwnd, Win32API.WM_COPYDATA, this.Handle, ref cds);
                return(true);
            }
            return(false);
        }
예제 #5
0
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case Win32API.WM_COPYDATA:
                Win32API.COPYDATASTRUCT cds = (Win32API.COPYDATASTRUCT)m.GetLParam(typeof(Win32API.COPYDATASTRUCT));
                //Win32API.COPYDATASTRUCT cds2 = (Win32API.COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(Win32API.COPYDATASTRUCT));

                byte[] data = new byte[cds.cbData];
                Marshal.Copy(cds.lpData, data, 0, cds.cbData);

                onMessage(cds.dwData.ToInt32(), Encoding.UTF8.GetString(data));
                break;

            default:
                break;
            }
            base.WndProc(ref m);
        }
예제 #6
0
        protected override void DefWndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
                #region 回显日志
            case Const.USER_LOG_MESSAGE:
            {
                Win32API.COPYDATASTRUCT LogString = new Win32API.COPYDATASTRUCT();
                Type type = LogString.GetType();
                LogString = (Win32API.COPYDATASTRUCT)m.GetLParam(type);
                AppendLog(LogString.lpData);
                break;
            }

                #endregion
                #region default
            default:
            {
                base.DefWndProc(ref m);     //调用基类函数,以便系统处理其它消息。
                break;
            }
                #endregion
            }
        }
예제 #7
0
 public static extern int SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, ref Win32API.COPYDATASTRUCT lParam);
예제 #8
0
        public void PanoramaCaptureStart(int nCh, PanoramaInfo panoInfo)
        {
            //이동
            if (CheckPresetRunStatus(nCh) == true)//이미 진행 중
            {
                return;
            }

            string status = String.Format("채널 {0} 프리셋 시작", nCh);

            //this.PresetStatusLabel.Content = status;
            //this.m_bPresetStart[nCh - 1] = true;



            //ImgPosToPanTiltPos(x, y, ref panAbs, ref tiltAbs, arrPanoInfo[nCh - 1]);
            PanoramaMoveInfo[] moveInfo = CalcPanoramaPanPostion(panoInfo);


            DestroyPacketParsingThread(nCh);//종료 시도
            for (int i = 0; i < 50; i++)
            {
                if (IsRunPacketParsingThread(nCh) == false)//종료되었는지 확인
                {
                    //패킷 파싱 스레드 종료
                    //이제 부터 동기적으로 송수신
                    break;
                }
                Thread.Sleep(100);
            }
            #region

            PanoramaCanvas[] arrCanvas = { panoramaCanvas1, panoramaCanvas2, panoramaCanvas3, panoramaCanvas4, panoramaCanvas5 };

            Task.Run(() =>
            {
                SetPresetRunStatus(nCh, true);
                const int nTimeOut     = 10;
                int nCount             = 0;
                int nTimeStamp         = 1;
                string strPresetStatus = "";

                while (true)
                {
                    for (int i = 0; i < moveInfo.Count(); i++)//12장 촬영
                    {
                        nTimeStamp = 0;
                        //선택이동 스레드
                        double panAbs  = moveInfo[i].dPan;
                        double tiltAbs = moveInfo[i].dTilt;
                        int zoom       = moveInfo[i].nZoomAbs;
                        int focus      = 50000;


                        string strPTZF = String.Format("001;{0:000.####};{1:+00.####;-00.####;+00.0000 };{2:00000};{3:00000}", panAbs, tiltAbs, zoom, focus);
                        arrCanvas[nCh - 1].panoSetupWindow.SetPanoramaStatus(strPTZF);
                        SendAuthorityCmd(nCh, CommandPTZFAbsMove.CMDGROUP_PTZFABSMOVE, CommandPTZFAbsMove.CMDTYPE_PTZFABSMOVE_MOVE, strPTZF);

                        Thread.Sleep(1000);

                        while (true)//상태확인
                        {
                            SendAuthorityCmd(nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_PAN_MOTORSTATUS_REQ);
                            string strStatus = GetPanMoveStatus(nCh);

                            if (strStatus == "1")
                            {
                                nCount = 0;
                                //System.Console.WriteLine("프리셋 이동중...");
                                strPresetStatus = String.Format("채널 {0} 파노라마 프레임{1} 이동중({2})", nCh, i + 1, nTimeStamp);
                            }
                            else if (strStatus == "2")
                            {
                                nCount = 0;
                                //System.Console.WriteLine("프리셋 이동 완료...");
                                strPresetStatus = String.Format("채널 {0} 파노라마 프레임{1} 이동 정지({2})", nCh, i + 1, nTimeStamp);
                                break;
                            }
                            else
                            {
                                strPresetStatus = String.Format("채널 {0} 파노라마 프레임{1} 상태 인식 실패({2})", nCh, i + 1, nTimeStamp);
                            }

                            arrCanvas[nCh - 1].panoSetupWindow.SetPanoramaStatus(strPresetStatus);
                            //SetPresetStatus(nCh, strPresetStatus);

                            SendAuthorityCmd(nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_PANTILT_POS_REQ);
                            Thread.Sleep(1000);

                            nCount++;
                            nTimeStamp++;
                            if (nCount >= nTimeOut)
                            {
                                break;
                            }
                        }

                        //캡처.

                        string imgName         = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + i.ToString() + ".jpg";
                        string baseDir         = AppDomain.CurrentDomain.BaseDirectory;
                        string chFolder        = String.Format("Ch{0:d2}\\", nCh);
                        string strFilePathName = baseDir + chFolder + imgName;
                        Process[] procByName   = Process.GetProcessesByName("Hawkeye_VideoPlayer");

                        if (procByName.Length > 0)
                        {
                            string msg  = strFilePathName;
                            byte[] buff = System.Text.Encoding.Default.GetBytes(msg);

                            Win32API.COPYDATASTRUCT cds = new Win32API.COPYDATASTRUCT();
                            cds.dwData = (IntPtr)nCh;
                            cds.cbData = buff.Length + 1;
                            cds.lpData = msg;

                            for (int j = 0; j < procByName.Length; j++)
                            {
                                Win32API.SendMessage(procByName[j].MainWindowHandle, Win32API.WM_COPYDATA, 0, ref cds);
                            }
                        }
                        Thread.Sleep(1000);
                        if (File.Exists(strFilePathName) == true)//파일이 존재
                        {
                            Console.WriteLine("파일이 존재합니다.");
                            arrCanvas[nCh - 1].SetImagePathName(i, strFilePathName);
                            strPresetStatus = String.Format("채널 {0} 파노라마 프레임{1} 캡처 성공", nCh, i + 1);

                            panoInfoIni.ReadIni(nCh);
                            panoInfoIni.arrPanoImagePathName[i] = strFilePathName;
                            panoInfoIni.WriteIni(nCh);
                        }
                        else
                        {
                            Console.WriteLine("파일을 찾을수없습니다.");
                            strPresetStatus = String.Format("채널 {0} 파노라마 프레임{1} 캡처 실패", nCh, i + 1);
                        }
                        arrCanvas[nCh - 1].panoSetupWindow.SetPanoramaStatus(strPresetStatus);
                    }

                    //

                    //Thread.Sleep(1000);
                    //SendAuthorityCmd(nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_PAN_MOTORSTATUS_REQ);
                    //string strMotorStatus = GetPanMotorStatus();
                    //UpdatePanMotorStatusUI(nCh, strMotorStatus, true);
                    break;
                }
                SendAuthorityCmd(nCh, CommandPTZReqResp.CMDGROUP_PTZREQ, CommandPTZReqResp.CMDTYPE_PTZREQ_PANTILT_POS_REQ);
                strPresetStatus = String.Format("채널 {0} 파노라마 촬영 완료({1})", nCh, nTimeStamp);
                arrCanvas[nCh - 1].panoSetupWindow.SetPanoramaStatus(strPresetStatus);
                //SetPresetStatus(nCh, strPresetStatus);
                //this.m_bPresetStart[nCh - 1] = false;
                SetPresetRunStatus(nCh, false);
                CreatePacketParsingThread(nCh);
            });
            #endregion
        }