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)); } }
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); }
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); }
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); }
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); }
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 } }
public static extern int SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, ref Win32API.COPYDATASTRUCT lParam);
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 }