八个线程 在 踢 足球,并且有八个球门,每个线程对应一个门(这里的门是固定的),一个裁判来监督线程是否犯规,然后再指定犯规的线程进行罚球,裁判要求对应犯规的线程将球踢进对应编号的球门。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 using System.Xml; 9 using ClassLibrary; 10 using System.Net.NetworkInformation; 11 using System.Net; 12 using System.Threading; 13 using System.Runtime.Remoting.Channels; 14 using System.Runtime.Remoting; 15 using System.Runtime.Remoting.Channels.Tcp; 16 using System.Linq; 17 18 namespace PoneMananger 19 { 20 21 22 public partial class TelManagerTest : Form 23 { 24 XmlDocument xmlDoc; 25 common bll = new common(); 26 public int m_DriverOpenFlag, m_TotalChannel, m_TotalVoiceChannel, m_TotalFaxChannel; 27 LINE[] m_Line; 28 29 delegate void dRunBall(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO _MessageBuffer, uint _intRing, char[] _ctemp);//委托查询单行数据添加到原表中 30 dRunBall _dRunBall; 31 32 public TelManagerTest() 33 { 34 InitializeComponent(); 35 } 36 37 private void TelManagerTest_Load(object sender, EventArgs e) 38 { 39 if (!PortInUse(2000)) 40 { 41 _dRunBall = new dRunBall(RunBall); 42 //用构造函数初始化监听端口,两种方式,这里用TCP 43 TcpServerChannel channel = new TcpServerChannel(2000); 44 ChannelServices.RegisterChannel(channel, false);//向信道服务注册信道 45 RemotingConfiguration.RegisterWellKnownServiceType(typeof(common), "common", WellKnownObjectMode.SingleCall); 46 47 } 48 common.modelinfo.Clear(); 49 LisnClient(); 50 InitialGxVoice(); 51 timer1.Start(); 52 } 53 54 /// <summary> 55 /// 端口的检测 56 /// </summary> 57 /// <param name="port"></param> 58 /// <returns></returns> 59 public static bool PortInUse(int port) 60 { 61 bool inUse = false; 62 63 IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); 64 IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); 65 66 foreach (IPEndPoint endPoint in ipEndPoints) 67 { 68 if (endPoint.Port == port) 69 { 70 inUse = true; 71 break; 72 } 73 } 74 return inUse; 75 } 76 77 public void LisnClient() 78 { 79 System.Threading.Thread threadtest; 80 xmlDoc = new XmlDocument(); 81 xmlDoc.Load("ipconfig.xml"); //加载xml文件 82 //获取bookshop节点的所有子节点 83 XmlNodeList nodeList = xmlDoc.SelectSingleNode("IPSettings").ChildNodes; 84 85 //遍历所有子节点 86 foreach (XmlNode xn in nodeList) 87 { 88 XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型 89 90 int ChannelNo = int.Parse(xe.GetAttribute("key")); 91 string value = xe.GetAttribute("value"); 92 switch (ChannelNo) 93 { 94 case 0: 95 //本地 96 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 97 { 98 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 99 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 100 } 101 else 102 { 103 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 104 { 105 common.modelinfo.Remove(ChannelNo.ToString()); 106 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 107 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 108 } 109 } 110 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 111 threadtest.Start(); 112 break; 113 case 1: 114 //张佳 115 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 116 { 117 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 118 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 119 } 120 else 121 { 122 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 123 { 124 common.modelinfo.Remove(ChannelNo.ToString()); 125 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 126 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 127 } 128 } 129 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 130 threadtest.Start(); 131 break; 132 case 2: 133 //田洪帅 134 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 135 { 136 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 137 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 138 } 139 else 140 { 141 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 142 { 143 common.modelinfo.Remove(ChannelNo.ToString()); 144 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 145 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 146 } 147 } 148 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 149 threadtest.Start(); 150 break; 151 case 3: 152 //刘聪 153 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 154 { 155 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 156 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 157 } 158 else 159 { 160 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 161 { 162 common.modelinfo.Remove(ChannelNo.ToString()); 163 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 164 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 165 } 166 } 167 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 168 threadtest.Start(); 169 break; 170 case 4: 171 //王毅力 172 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString()))//bll.GetModel(ChannelNo.ToString()) 173 { 174 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 175 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 176 } 177 else 178 { 179 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 180 { 181 common.modelinfo.Remove(ChannelNo.ToString()); 182 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 183 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 184 } 185 } 186 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 187 threadtest.Start(); 188 break; 189 case 5: 190 //李姐 191 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 192 { 193 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 194 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 195 } 196 else 197 { 198 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 199 { 200 common.modelinfo.Remove(ChannelNo.ToString()); 201 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 202 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 203 } 204 } 205 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 206 threadtest.Start(); 207 break; 208 case 6: 209 //张睿 210 211 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 212 { 213 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 214 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 215 } 216 else 217 { 218 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 219 { 220 common.modelinfo.Remove(ChannelNo.ToString()); 221 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 222 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 223 } 224 } 225 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 226 threadtest.Start(); 227 break; 228 case 7: 229 if (!common.modelinfo.Keys.Contains(ChannelNo.ToString())) 230 { 231 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 232 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 233 } 234 else 235 { 236 if (!string.IsNullOrEmpty(bll.GetModel(ChannelNo.ToString()).CallIp)) 237 { 238 common.modelinfo.Remove(ChannelNo.ToString()); 239 common.modelinfo.Add(ChannelNo.ToString(), new TestModel()); 240 bll.SetModelValue("CallIp", value, bll.GetModel(ChannelNo.ToString())); 241 } 242 } 243 threadtest = new Thread(new ThreadStart(StartCardWorkNew)); 244 threadtest.Start(); 245 break; 246 default: 247 break; 248 } 249 } 250 } 251 252 private bool InitialGxVoice() 253 { 254 try 255 { 256 m_DriverOpenFlag = GxVoiceAPI.GxVoice.GX_InitializeSystem(); 257 if (m_DriverOpenFlag != GxVoiceAPI.GxVoice.GX_OK) 258 { 259 foreach (KeyValuePair<string, TestModel> item in common.modelinfo) 260 { 261 bll.SetModelValue("IsInitialUsbGX", "false", item.Value); 262 bll.SetModelValue("Msg", "初始化硬件失败!", item.Value); 263 } 264 265 System.Windows.Forms.MessageBox.Show("初始化硬件失败!"); 266 return false; 267 } 268 269 m_TotalChannel = GxVoiceAPI.GxVoice.GX_GetTotalChannelCount(); 270 m_TotalVoiceChannel = GxVoiceAPI.GxVoice.GX_GetTotalVoiceChannel(); 271 272 if (m_TotalVoiceChannel > GxVoiceAPI.GxVoice.MAX_CHANNEL_NUM) 273 m_TotalVoiceChannel = GxVoiceAPI.GxVoice.MAX_CHANNEL_NUM; 274 m_Line = new LINE[m_TotalVoiceChannel]; 275 dgv电话管理.Rows.Clear(); 276 int nType; 277 string strType; 278 // string strStatus; 279 for (ushort i = 0; i < m_TotalVoiceChannel; i++) 280 { 281 #region 注释掉暂时不用的状态 282 // ushort cStatus = GxVoiceAPI.GxVoice.GX_GetChannelStatus(i); 283 // switch (cStatus) 284 // { 285 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_IDLE: 286 // strStatus = "未置"; 287 // break; 288 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_OPEN: 289 // strStatus = "内线"; 290 // break; 291 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_TRUNK_HOOK: 292 // strStatus = "外线"; 293 // break; 294 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_USER_RING: 295 // strStatus = "录音"; 296 // break; 297 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_PLAY: 298 // strStatus = "混合"; 299 // break; 300 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_RECORD: 301 // strStatus = "未置"; 302 // break; 303 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_GENERATE_DTMF: 304 // strStatus = "内线"; 305 // break; 306 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_SEND_FSK: 307 // strStatus = "外线"; 308 // break; 309 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_GENERATE_SIGNAL: 310 // strStatus = "录音"; 311 // break; 312 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_DETECT_DTMF: 313 // strStatus = "混合"; 314 // break; 315 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_DETECT_CID: 316 // strStatus = "录音"; 317 // break; 318 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_DETECT_FSK: 319 // strStatus = "混合"; 320 // break; 321 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_DETECT_SIGNAL: 322 // strStatus = "未置"; 323 // break; 324 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_DETECT_POL: 325 // strStatus = "内线"; 326 // break; 327 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_RECEIVE_FAX: 328 // strStatus = "外线"; 329 // break; 330 // case GxVoiceAPI.GxVoice.CHANNEL_STATUS_AUTO_DIAL_OUT: 331 // strStatus = "录音"; 332 // break; 333 // default: 334 // strStatus = "未知"; 335 // break; 336 // } 337 #endregion 338 nType = GxVoiceAPI.GxVoice.GX_GetChannelType(i); 339 m_Line[i].Status = STATUS.STATUS_IDLE; //通道状态 340 m_Line[i].iType = nType; //通道类型 341 m_Line[i].CallerID = ""; //来电号码 342 m_Line[i].Dtmf = ""; //dtmf按键 343 m_Line[i].HookOff = 0; //摘机标志 344 m_Line[i].Ring = 0; //振铃标志 345 m_Line[i].TimeCount = 0; 346 347 switch (nType) 348 { 349 case GxVoiceAPI.GxVoice.CHANNEL_TYPE_NONE: 350 strType = "未置"; 351 break; 352 case GxVoiceAPI.GxVoice.CHANNEL_TYPE_USER: 353 strType = "内线"; 354 break; 355 case GxVoiceAPI.GxVoice.CHANNEL_TYPE_TRUNK: 356 strType = "外线"; 357 break; 358 case GxVoiceAPI.GxVoice.CHANNEL_TYPE_RECORD: 359 strType = "录音"; 360 break; 361 case GxVoiceAPI.GxVoice.CHANNEL_TYPE_MIX: 362 strType = "混合"; 363 break; 364 default: 365 strType = "未知"; 366 break; 367 } 368 /*lv电话管理.Items.Add("Channel "+ i.ToString()); 369 lv电话管理.Items[i].SubItems.Add(strType); 370 lv电话管理.Items[i].SubItems.Add("Idle");*/ 371 dgv电话管理.Rows.Add(1); 372 dgv电话管理.Rows[i].Cells["id"].Value = i.ToString(); 373 dgv电话管理.Rows[i].Cells["chanelno"].Value = i.ToString(); 374 dgv电话管理.Rows[i].Cells["chaneltype"].Value = strType; 375 dgv电话管理.Rows[i].Cells["chanelstate"].Value = "空闲"; 376 dgv电话管理.Rows[i].Cells["callcode"].Value = ""; 377 dgv电话管理.Rows[i].Cells["calltype"].Value = ""; 378 dgv电话管理.Rows[i].Cells["calldate"].Value = ""; 379 380 if (nType != GxVoiceAPI.GxVoice.CHANNEL_TYPE_NONE) 381 { 382 if (GxVoiceAPI.GxVoice.GX_OpenChannel(i) == GxVoiceAPI.GxVoice.GX_OK) 383 { 384 GxVoiceAPI.GxVoice.GX_StartDetectDTMF(i, 0); 385 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(i); 386 387 /***********************************************************/ 388 /*********************AGC自动增益功能 **********************/ 389 /************USB1-2路和USB4-8、PCI的函数不一样,请注意******/ 390 /***********************************************************/ 391 //USB4-8和PCI 392 //GxVoiceAPI.GxVoice.GX_SetRecordAgc(i, 1, 1400, 23); 393 //GxVoiceAPI.GxVoice.GX_SetPlayAgc(i, 1, 1400, 23);*/ 394 395 //USB1-2 396 //GxVoiceAPI.GxVoice.GX_SetRecordAgcPar(i, 1, 1050, 17, 3900, 196); 397 } 398 } 399 bll.SetModelValue("IsInitialUsbGX", "true", bll.GetModel(i.ToString())); 400 } 401 return true; 402 } 403 catch (Exception ex) 404 { 405 foreach (KeyValuePair<string, TestModel> item in common.modelinfo) 406 { 407 bll.SetModelValue("IsInitialUsbGX", "false", item.Value); 408 bll.SetModelValue("Msg", "初始化硬件失败!", item.Value); 409 } 410 return true; 411 } 412 } 413 414 private bool ReleaseGxVoice() 415 { 416 if (m_DriverOpenFlag == GxVoiceAPI.GxVoice.GX_OK) 417 { 418 for (int i = 0; i <= m_TotalVoiceChannel - 1; i++) 419 { 420 GxVoiceAPI.GxVoice.GX_StopAllOperate((ushort)i); 421 GxVoiceAPI.GxVoice.GX_CloseChannel((ushort)i); 422 } 423 GxVoiceAPI.GxVoice.GX_CloseSystem(); 424 } 425 dgv电话管理.Rows.Clear(); 426 return true; 427 428 } 429 430 431 #region 不同球员的踢球动作 432 private void xunhuan1(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 433 { 434 if (m_Line[0].Status == STATUS.STATUS_IDLE) 435 { 436 #region STATUS_IDLE 437 switch (MessageCode) 438 { 439 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 440 //before hook off,dtmf is dtmf cid. 441 442 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(0, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 443 { 444 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 445 { 446 m_Line[0].CallerID += ctemp[0].ToString(); 447 bll.SetModelValue("CallCodeList", m_Line[0].Dtmf, bll.GetModel(0.ToString())); 448 dgv电话管理.Rows[0].Cells["callcode"].Value = m_Line[0].CallerID; 449 dgv电话管理.Rows[0].Cells["calltype"].Value = "呼入"; 450 dgv电话管理.Rows[0].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 451 } 452 } 453 break; 454 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 455 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 456 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(0, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 457 { 458 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(0.ToString())); 459 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(0);//停止检测DTMF按键 460 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(0);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 461 462 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(0, 50); 463 } 464 // common.EventName.Add("有DTMF方式的主叫事件"); 465 break; 466 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 467 { 468 char[] CIDdt = new char[50]; //来电时间 469 char[] CIDTelNo = new char[50]; //主叫号码 470 char[] CIDName = new char[50]; //主叫名字[一般没用] 471 472 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(0, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 473 { 474 m_Line[0].CallerID = ""; 475 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "外线来电"; 476 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(0);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 477 m_Line[0].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 478 //m_Line[0].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 479 480 dgv电话管理.Rows[0].Cells["callcode"].Value = m_Line[0].CallerID; 481 dgv电话管理.Rows[0].Cells["calltype"].Value = "呼入"; 482 dgv电话管理.Rows[0].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 483 } 484 } 485 break; 486 487 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 488 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "放音结束"; 489 break; 490 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 491 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "放音退出"; 492 break; 493 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 494 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "发码结束"; 495 break; 496 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 497 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "FSK结束"; 498 break; 499 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 500 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "拨号音"; 501 break; 502 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 503 bll.ClearModel(bll.GetModel(0.ToString())); 504 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "忙音"; 505 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 506 dgv电话管理.Rows[0].Cells["calldate"].Value = ""; 507 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 508 m_Line[0].HookOff = 1; 509 m_Line[0].CallerID = ""; 510 m_Line[0].Ring = 0; 511 m_Line[0].Status = STATUS.STATUS_RECORDING; 512 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "空闲"; 513 514 ctemp = new char[100]; 515 break; 516 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 517 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "回铃音"; 518 break; 519 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 520 break; 521 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 522 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "爆发音"; 523 break; 524 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 525 if (MessageBuffer.Parameter[0] == 0) 526 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "无声音"; 527 else 528 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "有声音"; 529 break; 530 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 531 bll.ClearModel(bll.GetModel(0.ToString())); 532 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "超时"; 533 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 534 dgv电话管理.Rows[0].Cells["calldate"].Value = ""; 535 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 536 m_Line[0].HookOff = 1; 537 m_Line[0].CallerID = ""; 538 m_Line[0].Ring = 0; 539 m_Line[0].Status = STATUS.STATUS_RECORDING; 540 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "空闲"; 541 ctemp = new char[100]; 542 break; 543 544 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 545 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "内线摘机"; 546 break; 547 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 548 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "内线挂机"; 549 break; 550 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 551 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "内线拍叉"; 552 break; 553 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 554 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "内线震铃结束"; 555 break; 556 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 557 m_Line[0].Ring = 1; 558 m_Line[0].TimeCount = 0; 559 intRing = MessageBuffer.Parameter[0]; 560 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 561 break; 562 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 563 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "极性反转"; 564 break; 565 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 566 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "拍叉结束"; 567 break; 568 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 569 570 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 0);//通道监听 571 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(0, 0); //两路连接通话 572 bll.SetModelValue("IsJieTing", "true", bll.GetModel(0.ToString())); 573 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(0.ToString())); 574 575 string wavName = "[" + 0.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 576 bll.SetModelValue("FileName", wavName, bll.GetModel(0.ToString())); 577 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(0, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 578 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音摘机"; 579 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 580 m_Line[0].HookOff = 1; 581 m_Line[0].Ring = 0; 582 m_Line[0].Status = STATUS.STATUS_RECORDING; 583 break; 584 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 585 bll.SetModelValue("IsCall", "true", bll.GetModel(0.ToString())); 586 bll.SetModelValue("0", 0.ToString(), bll.GetModel(0.ToString())); 587 588 m_Line[0].Ring = 1; 589 m_Line[0].TimeCount = 0; 590 intRing = MessageBuffer.Parameter[0]; 591 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 592 break; 593 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 594 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音断线"; 595 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 596 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 597 dgv电话管理.Rows[0].Cells["calldate"].Value = ""; 598 m_Line[0].CallerID = ""; 599 m_Line[0].Dtmf = ""; 600 m_Line[0].HookOff = 0; 601 m_Line[0].Ring = 0; 602 break; 603 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 604 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音接线"; 605 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 606 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 607 dgv电话管理.Rows[0].Cells["calldate"].Value = ""; 608 m_Line[0].CallerID = ""; 609 m_Line[0].Dtmf = ""; 610 m_Line[0].HookOff = 0; 611 m_Line[0].Ring = 0; 612 break; 613 614 } 615 #endregion 616 } 617 else if (m_Line[0].Status == STATUS.STATUS_RECORDING) 618 { 619 #region STATUS_RECORDING 620 switch (MessageCode) 621 { 622 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 623 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(0, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 624 { 625 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 626 { 627 m_Line[0].Dtmf += Convert.ToString(ctemp[0]); 628 dgv电话管理.Rows[0].Cells["callcode"].Value = m_Line[0].Dtmf; 629 bll.SetModelValue("CallCodeList", m_Line[0].Dtmf, bll.GetModel(0.ToString())); 630 } 631 } 632 break; 633 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 634 bll.SetModelValue("IsOverCall", "true", bll.GetModel(0.ToString())); 635 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(0.ToString())); 636 637 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(0, 0); //两路断开通话 638 GxVoiceAPI.GxVoice.GX_StopRecordVoice(0);//停止录音 639 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 640 641 bll.SetModelValue("Date", DateDiff(bll.GetModel(0.ToString()).DateStart, bll.GetModel(0.ToString()).DateStop), bll.GetModel(0.ToString())); 642 643 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音挂机"; 644 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 645 dgv电话管理.Rows[0].Cells["calldate"].Value = ""; 646 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 647 m_Line[0].HookOff = 1; 648 m_Line[0].CallerID = ""; 649 m_Line[0].Ring = 0; 650 m_Line[0].Status = STATUS.STATUS_IDLE; 651 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "空闲"; 652 ctemp = new char[100]; 653 break; 654 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 655 dgv电话管理.Rows[0].Cells["chanelstate"].Value = "录音断线"; 656 dgv电话管理.Rows[0].Cells["callcode"].Value = ""; 657 dgv电话管理.Rows[0].Cells["calltype"].Value = ""; 658 m_Line[0].CallerID = ""; 659 m_Line[0].Dtmf = ""; 660 m_Line[0].HookOff = 0; 661 m_Line[0].Ring = 0; 662 GxVoiceAPI.GxVoice.GX_StopRecordVoice(0); 663 m_Line[0].Status = STATUS.STATUS_IDLE; 664 break; 665 } 666 #endregion 667 } 668 } 669 private void xunhuan2(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 670 { 671 if (m_Line[1].Status == STATUS.STATUS_IDLE) 672 { 673 #region STATUS_IDLE 674 switch (MessageCode) 675 { 676 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 677 //before hook off,dtmf is dtmf cid. 678 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(1, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 679 { 680 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 681 { 682 m_Line[1].CallerID += ctemp[0].ToString(); 683 bll.SetModelValue("CallCodeList", m_Line[1].Dtmf, bll.GetModel(1.ToString())); 684 dgv电话管理.Rows[1].Cells["callcode"].Value = m_Line[1].CallerID; 685 dgv电话管理.Rows[1].Cells["calltype"].Value = "呼入"; 686 dgv电话管理.Rows[1].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 687 } 688 } 689 break; 690 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 691 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 692 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(1, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 693 { 694 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(1.ToString())); 695 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(1);//停止检测DTMF按键 696 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(1);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 697 698 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(1, 50); 699 } 700 // common.EventName.Add("有DTMF方式的主叫事件"); 701 break; 702 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 703 { 704 char[] CIDdt = new char[50]; //来电时间 705 char[] CIDTelNo = new char[50]; //主叫号码 706 char[] CIDName = new char[50]; //主叫名字[一般没用] 707 708 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(1, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 709 { 710 m_Line[1].CallerID = ""; 711 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "外线来电"; 712 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(1);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 713 m_Line[1].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 714 //m_Line[1].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 715 716 dgv电话管理.Rows[1].Cells["callcode"].Value = m_Line[1].CallerID; 717 dgv电话管理.Rows[1].Cells["calltype"].Value = "呼入"; 718 dgv电话管理.Rows[1].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 719 } 720 } 721 break; 722 723 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 724 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "放音结束"; 725 break; 726 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 727 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "放音退出"; 728 break; 729 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 730 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "发码结束"; 731 break; 732 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 733 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "FSK结束"; 734 break; 735 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 736 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "拨号音"; 737 break; 738 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 739 bll.ClearModel(bll.GetModel(1.ToString())); 740 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "忙音"; 741 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 742 dgv电话管理.Rows[1].Cells["calldate"].Value = ""; 743 m_Line[1].HookOff = 1; 744 m_Line[1].CallerID = ""; 745 m_Line[1].Ring = 0; 746 m_Line[1].Status = STATUS.STATUS_RECORDING; 747 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 748 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "空闲"; 749 ctemp = new char[100]; 750 break; 751 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 752 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "回铃音"; 753 break; 754 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 755 break; 756 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 757 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "爆发音"; 758 break; 759 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 760 if (MessageBuffer.Parameter[0] == 0) 761 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "无声音"; 762 else 763 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "有声音"; 764 break; 765 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 766 bll.ClearModel(bll.GetModel(1.ToString())); 767 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "超时"; 768 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 769 dgv电话管理.Rows[1].Cells["calldate"].Value = ""; 770 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 771 m_Line[1].HookOff = 1; 772 m_Line[1].CallerID = ""; 773 m_Line[1].Ring = 0; 774 m_Line[1].Status = STATUS.STATUS_RECORDING; 775 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "空闲"; 776 ctemp = new char[100]; 777 break; 778 779 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 780 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "内线摘机"; 781 break; 782 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 783 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "内线挂机"; 784 break; 785 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 786 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "内线拍叉"; 787 break; 788 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 789 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "内线震铃结束"; 790 break; 791 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 792 m_Line[1].Ring = 1; 793 m_Line[1].TimeCount = 0; 794 intRing = MessageBuffer.Parameter[0]; 795 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 796 break; 797 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 798 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "极性反转"; 799 break; 800 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 801 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "拍叉结束"; 802 break; 803 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 804 805 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 1);//通道监听 806 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(1, 0); //两路连接通话 807 bll.SetModelValue("IsJieTing", "true", bll.GetModel(1.ToString())); 808 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(1.ToString())); 809 810 string wavName = "[" + 1.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 811 bll.SetModelValue("FileName", wavName, bll.GetModel(1.ToString())); 812 813 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(1, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 814 815 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音摘机"; 816 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 817 m_Line[1].HookOff = 1; 818 m_Line[1].Ring = 0; 819 m_Line[1].Status = STATUS.STATUS_RECORDING; 820 break; 821 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 822 bll.SetModelValue("IsCall", "true", bll.GetModel(1.ToString())); 823 bll.SetModelValue("1", 1.ToString(), bll.GetModel(1.ToString())); 824 825 m_Line[1].Ring = 1; 826 m_Line[1].TimeCount = 0; 827 intRing = MessageBuffer.Parameter[0]; 828 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 829 break; 830 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 831 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音断线"; 832 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 833 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 834 m_Line[1].CallerID = ""; 835 m_Line[1].Dtmf = ""; 836 m_Line[1].HookOff = 0; 837 m_Line[1].Ring = 0; 838 break; 839 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 840 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音接线"; 841 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 842 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 843 m_Line[1].CallerID = ""; 844 m_Line[1].Dtmf = ""; 845 m_Line[1].HookOff = 0; 846 m_Line[1].Ring = 0; 847 break; 848 849 } 850 #endregion 851 } 852 else if (m_Line[1].Status == STATUS.STATUS_RECORDING) 853 { 854 #region STATUS_RECORDING 855 switch (MessageCode) 856 { 857 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 858 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(1, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 859 { 860 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 861 { 862 m_Line[1].Dtmf += Convert.ToString(ctemp[0]); 863 dgv电话管理.Rows[1].Cells["callcode"].Value = m_Line[1].Dtmf; 864 bll.SetModelValue("CallCodeList", m_Line[1].Dtmf, bll.GetModel(1.ToString())); 865 } 866 } 867 break; 868 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 869 bll.SetModelValue("IsOverCall", "true", bll.GetModel(1.ToString())); 870 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(1.ToString())); 871 872 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(1, 0); //两路断开通话 873 GxVoiceAPI.GxVoice.GX_StopRecordVoice(1);//停止录音 874 GxVoiceAPI.GxVoice.GX_UnListenChannel(1);//停止监听 875 876 bll.SetModelValue("Date", DateDiff(bll.GetModel(1.ToString()).DateStart, bll.GetModel(1.ToString()).DateStop), bll.GetModel(1.ToString())); 877 878 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音挂机"; 879 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 880 dgv电话管理.Rows[1].Cells["calldate"].Value = ""; 881 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 882 m_Line[1].HookOff = 1; 883 m_Line[1].CallerID = ""; 884 m_Line[1].Ring = 0; 885 m_Line[1].Status = STATUS.STATUS_IDLE; 886 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "空闲"; 887 ctemp = new char[100]; 888 break; 889 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 890 dgv电话管理.Rows[1].Cells["chanelstate"].Value = "录音断线"; 891 dgv电话管理.Rows[1].Cells["callcode"].Value = ""; 892 dgv电话管理.Rows[1].Cells["calltype"].Value = ""; 893 m_Line[1].CallerID = ""; 894 m_Line[1].Dtmf = ""; 895 m_Line[1].HookOff = 0; 896 m_Line[1].Ring = 0; 897 GxVoiceAPI.GxVoice.GX_StopRecordVoice(1); 898 m_Line[1].Status = STATUS.STATUS_IDLE; 899 break; 900 } 901 #endregion 902 } 903 } 904 private void xunhuan3(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 905 { 906 if (m_Line[2].Status == STATUS.STATUS_IDLE) 907 { 908 #region STATUS_IDLE 909 switch (MessageCode) 910 { 911 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 912 //before hook off,dtmf is dtmf cid. 913 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(2, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 914 { 915 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 916 { 917 m_Line[2].CallerID += ctemp[0].ToString(); 918 bll.SetModelValue("CallCodeList", m_Line[2].Dtmf, bll.GetModel(2.ToString())); 919 dgv电话管理.Rows[2].Cells["callcode"].Value = m_Line[2].CallerID; 920 dgv电话管理.Rows[2].Cells["calltype"].Value = "呼入"; 921 dgv电话管理.Rows[2].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 922 } 923 } 924 break; 925 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 926 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 927 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(2, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 928 { 929 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(2.ToString())); 930 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(2);//停止检测DTMF按键 931 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(2);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 932 933 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(2, 50); 934 } 935 // common.EventName.Add("有DTMF方式的主叫事件"); 936 break; 937 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 938 { 939 char[] CIDdt = new char[50]; //来电时间 940 char[] CIDTelNo = new char[50]; //主叫号码 941 char[] CIDName = new char[50]; //主叫名字[一般没用] 942 943 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(2, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 944 { 945 m_Line[2].CallerID = ""; 946 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "外线来电"; 947 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(2);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 948 m_Line[2].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 949 //m_Line[2].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 950 951 dgv电话管理.Rows[2].Cells["callcode"].Value = m_Line[2].CallerID; 952 dgv电话管理.Rows[2].Cells["calltype"].Value = "呼入"; 953 dgv电话管理.Rows[2].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 954 } 955 } 956 break; 957 958 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 959 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "放音结束"; 960 break; 961 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 962 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "放音退出"; 963 break; 964 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 965 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "发码结束"; 966 break; 967 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 968 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "FSK结束"; 969 break; 970 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 971 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "拨号音"; 972 break; 973 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 974 bll.ClearModel(bll.GetModel(2.ToString())); 975 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "忙音"; 976 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 977 dgv电话管理.Rows[2].Cells["calldate"].Value = ""; 978 m_Line[2].HookOff = 1; 979 m_Line[2].CallerID = ""; 980 m_Line[2].Ring = 0; 981 m_Line[2].Status = STATUS.STATUS_RECORDING; 982 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 983 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "空闲"; 984 ctemp = new char[100]; 985 break; 986 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 987 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "回铃音"; 988 break; 989 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 990 break; 991 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 992 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "爆发音"; 993 break; 994 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 995 if (MessageBuffer.Parameter[0] == 0) 996 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "无声音"; 997 else 998 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "有声音"; 999 break; 1000 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 1001 bll.ClearModel(bll.GetModel(2.ToString())); 1002 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "超时"; 1003 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1004 dgv电话管理.Rows[2].Cells["calldate"].Value = ""; 1005 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 1006 m_Line[2].HookOff = 1; 1007 m_Line[2].CallerID = ""; 1008 m_Line[2].Ring = 0; 1009 m_Line[2].Status = STATUS.STATUS_RECORDING; 1010 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "空闲"; 1011 ctemp = new char[100]; 1012 break; 1013 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 1014 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "内线摘机"; 1015 break; 1016 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 1017 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "内线挂机"; 1018 break; 1019 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 1020 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "内线拍叉"; 1021 break; 1022 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 1023 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "内线震铃结束"; 1024 break; 1025 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 1026 m_Line[2].Ring = 1; 1027 m_Line[2].TimeCount = 0; 1028 intRing = MessageBuffer.Parameter[0]; 1029 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 1030 break; 1031 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 1032 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "极性反转"; 1033 break; 1034 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 1035 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "拍叉结束"; 1036 break; 1037 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 1038 1039 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 2);//通道监听 1040 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(2, 0); //两路连接通话 1041 bll.SetModelValue("IsJieTing", "true", bll.GetModel(2.ToString())); 1042 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(2.ToString())); 1043 1044 string wavName = "[" + 2.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 1045 bll.SetModelValue("FileName", wavName, bll.GetModel(2.ToString())); 1046 1047 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(2, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 1048 1049 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音摘机"; 1050 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1051 m_Line[2].HookOff = 1; 1052 m_Line[2].Ring = 0; 1053 m_Line[2].Status = STATUS.STATUS_RECORDING; 1054 break; 1055 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 1056 bll.SetModelValue("IsCall", "true", bll.GetModel(2.ToString())); 1057 bll.SetModelValue("2", 2.ToString(), bll.GetModel(2.ToString())); 1058 1059 m_Line[2].Ring = 1; 1060 m_Line[2].TimeCount = 0; 1061 intRing = MessageBuffer.Parameter[0]; 1062 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 1063 break; 1064 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1065 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音断线"; 1066 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1067 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 1068 m_Line[2].CallerID = ""; 1069 m_Line[2].Dtmf = ""; 1070 m_Line[2].HookOff = 0; 1071 m_Line[2].Ring = 0; 1072 break; 1073 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 1074 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音接线"; 1075 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1076 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 1077 m_Line[2].CallerID = ""; 1078 m_Line[2].Dtmf = ""; 1079 m_Line[2].HookOff = 0; 1080 m_Line[2].Ring = 0; 1081 break; 1082 1083 } 1084 #endregion 1085 } 1086 else if (m_Line[2].Status == STATUS.STATUS_RECORDING) 1087 { 1088 #region STATUS_RECORDING 1089 switch (MessageCode) 1090 { 1091 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 1092 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(2, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1093 { 1094 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1095 { 1096 m_Line[2].Dtmf += Convert.ToString(ctemp[0]); 1097 dgv电话管理.Rows[2].Cells["callcode"].Value = m_Line[2].Dtmf; 1098 bll.SetModelValue("CallCodeList", m_Line[2].Dtmf, bll.GetModel(2.ToString())); 1099 } 1100 } 1101 break; 1102 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 1103 bll.SetModelValue("IsOverCall", "true", bll.GetModel(2.ToString())); 1104 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(2.ToString())); 1105 1106 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(2, 0); //两路断开通话 1107 GxVoiceAPI.GxVoice.GX_StopRecordVoice(2);//停止录音 1108 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 1109 1110 bll.SetModelValue("Date", DateDiff(bll.GetModel(2.ToString()).DateStart, bll.GetModel(2.ToString()).DateStop), bll.GetModel(2.ToString())); 1111 1112 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音挂机"; 1113 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1114 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 1115 m_Line[2].CallerID = ""; 1116 m_Line[2].Dtmf = ""; 1117 m_Line[2].HookOff = 0; 1118 m_Line[2].Ring = 0; 1119 m_Line[2].Status = STATUS.STATUS_IDLE; 1120 ctemp = new char[100]; 1121 break; 1122 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1123 dgv电话管理.Rows[2].Cells["chanelstate"].Value = "录音断线"; 1124 dgv电话管理.Rows[2].Cells["callcode"].Value = ""; 1125 dgv电话管理.Rows[2].Cells["calltype"].Value = ""; 1126 m_Line[2].CallerID = ""; 1127 m_Line[2].Dtmf = ""; 1128 m_Line[2].HookOff = 0; 1129 m_Line[2].Ring = 0; 1130 GxVoiceAPI.GxVoice.GX_StopRecordVoice(2); 1131 m_Line[2].Status = STATUS.STATUS_IDLE; 1132 break; 1133 } 1134 #endregion 1135 } 1136 } 1137 private void xunhuan4(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 1138 { 1139 if (m_Line[3].Status == STATUS.STATUS_IDLE) 1140 { 1141 #region STATUS_IDLE 1142 switch (MessageCode) 1143 { 1144 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 1145 //before hook off,dtmf is dtmf cid. 1146 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(3, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1147 { 1148 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1149 { 1150 m_Line[3].CallerID += ctemp[0].ToString(); 1151 bll.SetModelValue("CallCodeList", m_Line[3].Dtmf, bll.GetModel(3.ToString())); 1152 dgv电话管理.Rows[3].Cells["callcode"].Value = m_Line[3].CallerID; 1153 dgv电话管理.Rows[3].Cells["calltype"].Value = "呼入"; 1154 dgv电话管理.Rows[3].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1155 } 1156 } 1157 break; 1158 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 1159 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 1160 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(3, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 1161 { 1162 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(3.ToString())); 1163 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(3);//停止检测DTMF按键 1164 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(3);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 1165 1166 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(3, 50); 1167 } 1168 // common.EventName.Add("有DTMF方式的主叫事件"); 1169 break; 1170 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 1171 { 1172 char[] CIDdt = new char[50]; //来电时间 1173 char[] CIDTelNo = new char[50]; //主叫号码 1174 char[] CIDName = new char[50]; //主叫名字[一般没用] 1175 1176 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(3, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 1177 { 1178 m_Line[3].CallerID = ""; 1179 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "外线来电"; 1180 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(3);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 1181 m_Line[3].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 1182 //m_Line[3].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 1183 1184 dgv电话管理.Rows[3].Cells["callcode"].Value = m_Line[3].CallerID; 1185 dgv电话管理.Rows[3].Cells["calltype"].Value = "呼入"; 1186 dgv电话管理.Rows[3].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1187 } 1188 } 1189 break; 1190 1191 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 1192 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "放音结束"; 1193 break; 1194 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 1195 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "放音退出"; 1196 break; 1197 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 1198 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "发码结束"; 1199 break; 1200 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 1201 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "FSK结束"; 1202 break; 1203 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 1204 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "拨号音"; 1205 break; 1206 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 1207 bll.ClearModel(bll.GetModel(3.ToString())); 1208 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "忙音"; 1209 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1210 dgv电话管理.Rows[3].Cells["calldate"].Value = ""; 1211 m_Line[3].HookOff = 1; 1212 m_Line[3].CallerID = ""; 1213 m_Line[3].Ring = 0; 1214 m_Line[3].Status = STATUS.STATUS_RECORDING; 1215 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1216 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "空闲"; 1217 ctemp = new char[100]; 1218 break; 1219 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 1220 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "回铃音"; 1221 break; 1222 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 1223 break; 1224 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 1225 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "爆发音"; 1226 break; 1227 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 1228 if (MessageBuffer.Parameter[0] == 0) 1229 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "无声音"; 1230 else 1231 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "有声音"; 1232 break; 1233 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 1234 bll.ClearModel(bll.GetModel(3.ToString())); 1235 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "超时"; 1236 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1237 dgv电话管理.Rows[3].Cells["calldate"].Value = ""; 1238 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1239 m_Line[3].HookOff = 1; 1240 m_Line[3].CallerID = ""; 1241 m_Line[3].Ring = 0; 1242 m_Line[3].Status = STATUS.STATUS_RECORDING; 1243 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "空闲"; 1244 ctemp = new char[100]; 1245 break; 1246 1247 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 1248 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "内线摘机"; 1249 break; 1250 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 1251 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "内线挂机"; 1252 break; 1253 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 1254 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "内线拍叉"; 1255 break; 1256 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 1257 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "内线震铃结束"; 1258 break; 1259 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 1260 m_Line[3].Ring = 1; 1261 m_Line[3].TimeCount = 0; 1262 intRing = MessageBuffer.Parameter[0]; 1263 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 1264 break; 1265 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 1266 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "极性反转"; 1267 break; 1268 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 1269 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "拍叉结束"; 1270 break; 1271 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 1272 1273 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 3);//通道监听 1274 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(3, 0); //两路连接通话 1275 bll.SetModelValue("IsJieTing", "true", bll.GetModel(3.ToString())); 1276 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(3.ToString())); 1277 1278 string wavName = "[" + 3.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 1279 bll.SetModelValue("FileName", wavName, bll.GetModel(3.ToString())); 1280 1281 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(3, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 1282 1283 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音摘机"; 1284 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1285 m_Line[3].HookOff = 1; 1286 m_Line[3].Ring = 0; 1287 m_Line[3].Status = STATUS.STATUS_RECORDING; 1288 break; 1289 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 1290 bll.SetModelValue("IsCall", "true", bll.GetModel(3.ToString())); 1291 bll.SetModelValue("3", 3.ToString(), bll.GetModel(3.ToString())); 1292 1293 m_Line[3].Ring = 1; 1294 m_Line[3].TimeCount = 0; 1295 intRing = MessageBuffer.Parameter[0]; 1296 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 1297 break; 1298 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1299 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音断线"; 1300 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1301 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1302 m_Line[3].CallerID = ""; 1303 m_Line[3].Dtmf = ""; 1304 m_Line[3].HookOff = 0; 1305 m_Line[3].Ring = 0; 1306 break; 1307 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 1308 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音接线"; 1309 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1310 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1311 m_Line[3].CallerID = ""; 1312 m_Line[3].Dtmf = ""; 1313 m_Line[3].HookOff = 0; 1314 m_Line[3].Ring = 0; 1315 break; 1316 1317 } 1318 #endregion 1319 } 1320 else if (m_Line[3].Status == STATUS.STATUS_RECORDING) 1321 { 1322 #region STATUS_RECORDING 1323 switch (MessageCode) 1324 { 1325 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 1326 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(3, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1327 { 1328 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1329 { 1330 m_Line[3].Dtmf += Convert.ToString(ctemp[0]); 1331 dgv电话管理.Rows[3].Cells["callcode"].Value = m_Line[3].Dtmf; 1332 bll.SetModelValue("CallCodeList", m_Line[3].Dtmf, bll.GetModel(3.ToString())); 1333 } 1334 } 1335 break; 1336 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 1337 bll.SetModelValue("IsOverCall", "true", bll.GetModel(3.ToString())); 1338 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(3.ToString())); 1339 1340 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(3, 0); //两路断开通话 1341 GxVoiceAPI.GxVoice.GX_StopRecordVoice(3);//停止录音 1342 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 1343 1344 bll.SetModelValue("Date", DateDiff(bll.GetModel(3.ToString()).DateStart, bll.GetModel(3.ToString()).DateStop), bll.GetModel(3.ToString())); 1345 1346 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音挂机"; 1347 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1348 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1349 m_Line[3].CallerID = ""; 1350 m_Line[3].Dtmf = ""; 1351 m_Line[3].HookOff = 0; 1352 m_Line[3].Ring = 0; 1353 m_Line[3].Status = STATUS.STATUS_IDLE; 1354 1355 dgv电话管理.Rows[3].Cells["calldate"].Value = ""; 1356 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "空闲"; 1357 ctemp = new char[100]; 1358 break; 1359 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1360 dgv电话管理.Rows[3].Cells["chanelstate"].Value = "录音断线"; 1361 dgv电话管理.Rows[3].Cells["callcode"].Value = ""; 1362 dgv电话管理.Rows[3].Cells["calltype"].Value = ""; 1363 m_Line[3].CallerID = ""; 1364 m_Line[3].Dtmf = ""; 1365 m_Line[3].HookOff = 0; 1366 m_Line[3].Ring = 0; 1367 GxVoiceAPI.GxVoice.GX_StopRecordVoice(3); 1368 m_Line[3].Status = STATUS.STATUS_IDLE; 1369 break; 1370 } 1371 #endregion 1372 } 1373 } 1374 private void xunhuan5(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 1375 { 1376 if (m_Line[4].Status == STATUS.STATUS_IDLE) 1377 { 1378 #region STATUS_IDLE 1379 switch (MessageCode) 1380 { 1381 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 1382 //before hook off,dtmf is dtmf cid. 1383 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(4, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1384 { 1385 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1386 { 1387 m_Line[4].CallerID += ctemp[0].ToString(); 1388 bll.SetModelValue("CallCodeList", m_Line[4].Dtmf, bll.GetModel(4.ToString())); 1389 dgv电话管理.Rows[4].Cells["callcode"].Value = m_Line[4].CallerID; 1390 dgv电话管理.Rows[4].Cells["calltype"].Value = "呼入"; 1391 dgv电话管理.Rows[4].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1392 } 1393 } 1394 break; 1395 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 1396 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 1397 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(4, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 1398 { 1399 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(4.ToString())); 1400 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(4);//停止检测DTMF按键 1401 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(4);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 1402 1403 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(4, 50); 1404 } 1405 // common.EventName.Add("有DTMF方式的主叫事件"); 1406 break; 1407 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 1408 { 1409 char[] CIDdt = new char[50]; //来电时间 1410 char[] CIDTelNo = new char[50]; //主叫号码 1411 char[] CIDName = new char[50]; //主叫名字[一般没用] 1412 1413 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(4, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 1414 { 1415 m_Line[4].CallerID = ""; 1416 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "外线来电"; 1417 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(4);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 1418 m_Line[4].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 1419 //m_Line[4].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 1420 1421 dgv电话管理.Rows[4].Cells["callcode"].Value = m_Line[4].CallerID; 1422 dgv电话管理.Rows[4].Cells["calltype"].Value = "呼入"; 1423 dgv电话管理.Rows[4].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1424 } 1425 } 1426 break; 1427 1428 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 1429 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "放音结束"; 1430 break; 1431 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 1432 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "放音退出"; 1433 break; 1434 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 1435 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "发码结束"; 1436 break; 1437 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 1438 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "FSK结束"; 1439 break; 1440 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 1441 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "拨号音"; 1442 break; 1443 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 1444 bll.ClearModel(bll.GetModel(4.ToString())); 1445 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "忙音"; 1446 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1447 m_Line[4].HookOff = 1; 1448 m_Line[4].CallerID = ""; 1449 m_Line[4].Ring = 0; 1450 m_Line[4].Status = STATUS.STATUS_RECORDING; 1451 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1452 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "空闲"; 1453 ctemp = new char[100]; 1454 break; 1455 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 1456 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "回铃音"; 1457 break; 1458 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 1459 break; 1460 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 1461 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "爆发音"; 1462 break; 1463 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 1464 if (MessageBuffer.Parameter[0] == 0) 1465 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "无声音"; 1466 else 1467 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "有声音"; 1468 break; 1469 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 1470 bll.ClearModel(bll.GetModel(4.ToString())); 1471 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "超时"; 1472 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1473 dgv电话管理.Rows[4].Cells["calldate"].Value = ""; 1474 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1475 m_Line[4].HookOff = 1; 1476 m_Line[4].CallerID = ""; 1477 m_Line[4].Ring = 0; 1478 m_Line[4].Status = STATUS.STATUS_RECORDING; 1479 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "空闲"; 1480 ctemp = new char[100]; 1481 break; 1482 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 1483 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "内线摘机"; 1484 break; 1485 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 1486 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "内线挂机"; 1487 break; 1488 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 1489 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "内线拍叉"; 1490 break; 1491 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 1492 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "内线震铃结束"; 1493 break; 1494 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 1495 m_Line[4].Ring = 1; 1496 m_Line[4].TimeCount = 0; 1497 intRing = MessageBuffer.Parameter[0]; 1498 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 1499 break; 1500 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 1501 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "极性反转"; 1502 break; 1503 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 1504 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "拍叉结束"; 1505 break; 1506 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 1507 1508 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 4);//通道监听 1509 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(4, 0); //两路连接通话 1510 bll.SetModelValue("IsJieTing", "true", bll.GetModel(4.ToString())); 1511 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(4.ToString())); 1512 1513 string wavName = "[" + 4.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 1514 bll.SetModelValue("FileName", wavName, bll.GetModel(4.ToString())); 1515 1516 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(4, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 1517 1518 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音摘机"; 1519 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1520 m_Line[4].HookOff = 1; 1521 m_Line[4].Ring = 0; 1522 m_Line[4].Status = STATUS.STATUS_RECORDING; 1523 break; 1524 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 1525 bll.SetModelValue("IsCall", "true", bll.GetModel(4.ToString())); 1526 bll.SetModelValue("4", 4.ToString(), bll.GetModel(4.ToString())); 1527 1528 m_Line[4].Ring = 1; 1529 m_Line[4].TimeCount = 0; 1530 intRing = MessageBuffer.Parameter[0]; 1531 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 1532 break; 1533 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1534 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音断线"; 1535 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1536 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1537 m_Line[4].CallerID = ""; 1538 m_Line[4].Dtmf = ""; 1539 m_Line[4].HookOff = 0; 1540 m_Line[4].Ring = 0; 1541 break; 1542 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 1543 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音接线"; 1544 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1545 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1546 m_Line[4].CallerID = ""; 1547 m_Line[4].Dtmf = ""; 1548 m_Line[4].HookOff = 0; 1549 m_Line[4].Ring = 0; 1550 break; 1551 1552 } 1553 #endregion 1554 } 1555 else if (m_Line[4].Status == STATUS.STATUS_RECORDING) 1556 { 1557 #region STATUS_RECORDING 1558 switch (MessageCode) 1559 { 1560 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 1561 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(4, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1562 { 1563 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1564 { 1565 m_Line[4].Dtmf += Convert.ToString(ctemp[0]); 1566 dgv电话管理.Rows[4].Cells["callcode"].Value = m_Line[4].Dtmf; 1567 bll.SetModelValue("CallCodeList", m_Line[4].Dtmf, bll.GetModel(4.ToString())); 1568 } 1569 } 1570 break; 1571 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 1572 bll.SetModelValue("IsOverCall", "true", bll.GetModel(4.ToString())); 1573 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(4.ToString())); 1574 1575 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(4, 0); //两路断开通话 1576 GxVoiceAPI.GxVoice.GX_StopRecordVoice(4);//停止录音 1577 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 1578 1579 bll.SetModelValue("Date", DateDiff(bll.GetModel(4.ToString()).DateStart, bll.GetModel(4.ToString()).DateStop), bll.GetModel(4.ToString())); 1580 1581 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音挂机"; 1582 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1583 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1584 m_Line[4].CallerID = ""; 1585 m_Line[4].Dtmf = ""; 1586 m_Line[4].HookOff = 0; 1587 m_Line[4].Ring = 0; 1588 m_Line[4].Status = STATUS.STATUS_IDLE; 1589 1590 dgv电话管理.Rows[4].Cells["calldate"].Value = ""; 1591 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "空闲"; 1592 ctemp = new char[100]; 1593 break; 1594 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1595 dgv电话管理.Rows[4].Cells["chanelstate"].Value = "录音断线"; 1596 dgv电话管理.Rows[4].Cells["callcode"].Value = ""; 1597 dgv电话管理.Rows[4].Cells["calltype"].Value = ""; 1598 m_Line[4].CallerID = ""; 1599 m_Line[4].Dtmf = ""; 1600 m_Line[4].HookOff = 0; 1601 m_Line[4].Ring = 0; 1602 GxVoiceAPI.GxVoice.GX_StopRecordVoice(4); 1603 m_Line[4].Status = STATUS.STATUS_IDLE; 1604 break; 1605 } 1606 #endregion 1607 } 1608 } 1609 private void xunhuan6(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 1610 { 1611 if (m_Line[5].Status == STATUS.STATUS_IDLE) 1612 { 1613 #region STATUS_IDLE 1614 switch (MessageCode) 1615 { 1616 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 1617 //before hook off,dtmf is dtmf cid. 1618 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(5, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1619 { 1620 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1621 { 1622 m_Line[5].CallerID += ctemp[0].ToString(); 1623 bll.SetModelValue("CallCodeList", m_Line[5].Dtmf, bll.GetModel(5.ToString())); 1624 dgv电话管理.Rows[5].Cells["callcode"].Value = m_Line[5].CallerID; 1625 dgv电话管理.Rows[5].Cells["calltype"].Value = "呼入"; 1626 dgv电话管理.Rows[5].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1627 } 1628 } 1629 break; 1630 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 1631 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 1632 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(5, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 1633 { 1634 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(5.ToString())); 1635 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(5);//停止检测DTMF按键 1636 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(5);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 1637 1638 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(5, 50); 1639 } 1640 // common.EventName.Add("有DTMF方式的主叫事件"); 1641 break; 1642 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 1643 { 1644 char[] CIDdt = new char[50]; //来电时间 1645 char[] CIDTelNo = new char[50]; //主叫号码 1646 char[] CIDName = new char[50]; //主叫名字[一般没用] 1647 1648 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(5, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 1649 { 1650 m_Line[5].CallerID = ""; 1651 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "外线来电"; 1652 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(5);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 1653 m_Line[5].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 1654 //m_Line[5].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 1655 1656 dgv电话管理.Rows[5].Cells["callcode"].Value = m_Line[5].CallerID; 1657 dgv电话管理.Rows[5].Cells["calltype"].Value = "呼入"; 1658 dgv电话管理.Rows[5].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1659 } 1660 } 1661 break; 1662 1663 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 1664 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "放音结束"; 1665 break; 1666 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 1667 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "放音退出"; 1668 break; 1669 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 1670 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "发码结束"; 1671 break; 1672 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 1673 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "FSK结束"; 1674 break; 1675 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 1676 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "拨号音"; 1677 break; 1678 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 1679 bll.ClearModel(bll.GetModel(5.ToString())); 1680 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "忙音"; 1681 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1682 dgv电话管理.Rows[5].Cells["calldate"].Value = ""; 1683 m_Line[5].HookOff = 1; 1684 m_Line[5].CallerID = ""; 1685 m_Line[5].Ring = 0; 1686 m_Line[5].Status = STATUS.STATUS_RECORDING; 1687 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1688 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "空闲"; 1689 ctemp = new char[100]; 1690 break; 1691 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 1692 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "回铃音"; 1693 break; 1694 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 1695 break; 1696 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 1697 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "爆发音"; 1698 break; 1699 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 1700 if (MessageBuffer.Parameter[0] == 0) 1701 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "无声音"; 1702 else 1703 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "有声音"; 1704 break; 1705 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 1706 bll.ClearModel(bll.GetModel(5.ToString())); 1707 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "超时"; 1708 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1709 dgv电话管理.Rows[5].Cells["calldate"].Value = ""; 1710 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1711 m_Line[5].HookOff = 1; 1712 m_Line[5].CallerID = ""; 1713 m_Line[5].Ring = 0; 1714 m_Line[5].Status = STATUS.STATUS_RECORDING; 1715 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "空闲"; 1716 ctemp = new char[100]; 1717 break; 1718 1719 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 1720 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "内线摘机"; 1721 break; 1722 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 1723 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "内线挂机"; 1724 break; 1725 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 1726 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "内线拍叉"; 1727 break; 1728 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 1729 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "内线震铃结束"; 1730 break; 1731 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 1732 m_Line[5].Ring = 1; 1733 m_Line[5].TimeCount = 0; 1734 intRing = MessageBuffer.Parameter[0]; 1735 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 1736 break; 1737 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 1738 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "极性反转"; 1739 break; 1740 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 1741 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "拍叉结束"; 1742 break; 1743 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 1744 1745 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 5);//通道监听 1746 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(5, 0); //两路连接通话 1747 bll.SetModelValue("IsJieTing", "true", bll.GetModel(5.ToString())); 1748 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(5.ToString())); 1749 1750 string wavName = "[" + 5.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 1751 bll.SetModelValue("FileName", wavName, bll.GetModel(5.ToString())); 1752 1753 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(5, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 1754 1755 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音摘机"; 1756 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1757 m_Line[5].HookOff = 1; 1758 m_Line[5].Ring = 0; 1759 m_Line[5].Status = STATUS.STATUS_RECORDING; 1760 break; 1761 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 1762 bll.SetModelValue("IsCall", "true", bll.GetModel(5.ToString())); 1763 bll.SetModelValue("5", 5.ToString(), bll.GetModel(5.ToString())); 1764 1765 m_Line[5].Ring = 1; 1766 m_Line[5].TimeCount = 0; 1767 intRing = MessageBuffer.Parameter[0]; 1768 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 1769 break; 1770 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1771 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音断线"; 1772 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1773 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1774 m_Line[5].CallerID = ""; 1775 m_Line[5].Dtmf = ""; 1776 m_Line[5].HookOff = 0; 1777 m_Line[5].Ring = 0; 1778 break; 1779 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 1780 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音接线"; 1781 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1782 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1783 m_Line[5].CallerID = ""; 1784 m_Line[5].Dtmf = ""; 1785 m_Line[5].HookOff = 0; 1786 m_Line[5].Ring = 0; 1787 break; 1788 1789 } 1790 #endregion 1791 } 1792 else if (m_Line[5].Status == STATUS.STATUS_RECORDING) 1793 { 1794 #region STATUS_RECORDING 1795 switch (MessageCode) 1796 { 1797 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 1798 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(5, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1799 { 1800 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1801 { 1802 m_Line[5].Dtmf += Convert.ToString(ctemp[0]); 1803 dgv电话管理.Rows[5].Cells["callcode"].Value = m_Line[5].Dtmf; 1804 bll.SetModelValue("CallCodeList", m_Line[5].Dtmf, bll.GetModel(5.ToString())); 1805 } 1806 } 1807 break; 1808 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 1809 bll.SetModelValue("IsOverCall", "true", bll.GetModel(5.ToString())); 1810 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(5.ToString())); 1811 1812 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(5, 0); //两路断开通话 1813 GxVoiceAPI.GxVoice.GX_StopRecordVoice(5);//停止录音 1814 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 1815 1816 bll.SetModelValue("Date", DateDiff(bll.GetModel(5.ToString()).DateStart, bll.GetModel(5.ToString()).DateStop), bll.GetModel(5.ToString())); 1817 1818 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音挂机"; 1819 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1820 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1821 m_Line[5].CallerID = ""; 1822 m_Line[5].Dtmf = ""; 1823 m_Line[5].HookOff = 0; 1824 m_Line[5].Ring = 0; 1825 m_Line[5].Status = STATUS.STATUS_IDLE; 1826 1827 dgv电话管理.Rows[5].Cells["calldate"].Value = ""; 1828 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "空闲"; 1829 ctemp = new char[100]; 1830 break; 1831 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 1832 dgv电话管理.Rows[5].Cells["chanelstate"].Value = "录音断线"; 1833 dgv电话管理.Rows[5].Cells["callcode"].Value = ""; 1834 dgv电话管理.Rows[5].Cells["calltype"].Value = ""; 1835 m_Line[5].CallerID = ""; 1836 m_Line[5].Dtmf = ""; 1837 m_Line[5].HookOff = 0; 1838 m_Line[5].Ring = 0; 1839 GxVoiceAPI.GxVoice.GX_StopRecordVoice(5); 1840 m_Line[5].Status = STATUS.STATUS_IDLE; 1841 break; 1842 } 1843 #endregion 1844 } 1845 } 1846 private void xunhuan7(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 1847 { 1848 if (m_Line[6].Status == STATUS.STATUS_IDLE) 1849 { 1850 #region STATUS_IDLE 1851 switch (MessageCode) 1852 { 1853 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 1854 //before hook off,dtmf is dtmf cid. 1855 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(6, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 1856 { 1857 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 1858 { 1859 m_Line[6].CallerID += ctemp[0].ToString(); 1860 bll.SetModelValue("CallCodeList", m_Line[6].Dtmf, bll.GetModel(6.ToString())); 1861 dgv电话管理.Rows[6].Cells["callcode"].Value = m_Line[6].CallerID; 1862 dgv电话管理.Rows[6].Cells["calltype"].Value = "呼入"; 1863 dgv电话管理.Rows[6].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1864 } 1865 } 1866 break; 1867 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 1868 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 1869 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(6, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 1870 { 1871 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(6.ToString())); 1872 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(6);//停止检测DTMF按键 1873 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(6);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 1874 1875 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(6, 50); 1876 } 1877 // common.EventName.Add("有DTMF方式的主叫事件"); 1878 break; 1879 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 1880 { 1881 char[] CIDdt = new char[50]; //来电时间 1882 char[] CIDTelNo = new char[50]; //主叫号码 1883 char[] CIDName = new char[50]; //主叫名字[一般没用] 1884 1885 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(6, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 1886 { 1887 m_Line[6].CallerID = ""; 1888 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "外线来电"; 1889 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(6);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 1890 m_Line[6].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 1891 //m_Line[6].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 1892 1893 dgv电话管理.Rows[6].Cells["callcode"].Value = m_Line[6].CallerID; 1894 dgv电话管理.Rows[6].Cells["calltype"].Value = "呼出"; 1895 dgv电话管理.Rows[6].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 1896 } 1897 } 1898 break; 1899 1900 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 1901 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "放音结束"; 1902 break; 1903 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 1904 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "放音退出"; 1905 break; 1906 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 1907 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "发码结束"; 1908 break; 1909 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 1910 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "FSK结束"; 1911 break; 1912 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 1913 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "拨号音"; 1914 break; 1915 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 1916 bll.ClearModel(bll.GetModel(6.ToString())); 1917 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "忙音"; 1918 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 1919 dgv电话管理.Rows[6].Cells["calldate"].Value = ""; 1920 m_Line[6].HookOff = 1; 1921 m_Line[6].CallerID = ""; 1922 m_Line[6].Ring = 0; 1923 m_Line[6].Status = STATUS.STATUS_RECORDING; 1924 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 1925 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "空闲"; 1926 ctemp = new char[100]; 1927 break; 1928 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 1929 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "回铃音"; 1930 break; 1931 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 1932 break; 1933 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 1934 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "爆发音"; 1935 break; 1936 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 1937 if (MessageBuffer.Parameter[0] == 0) 1938 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "无声音"; 1939 else 1940 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "有声音"; 1941 break; 1942 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 1943 bll.ClearModel(bll.GetModel(6.ToString())); 1944 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "超时"; 1945 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 1946 dgv电话管理.Rows[6].Cells["calldate"].Value = ""; 1947 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 1948 m_Line[6].HookOff = 1; 1949 m_Line[6].CallerID = ""; 1950 m_Line[6].Ring = 0; 1951 m_Line[6].Status = STATUS.STATUS_RECORDING; 1952 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "空闲"; 1953 ctemp = new char[100]; 1954 break; 1955 1956 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 1957 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "内线摘机"; 1958 break; 1959 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 1960 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "内线挂机"; 1961 break; 1962 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 1963 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "内线拍叉"; 1964 break; 1965 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 1966 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "内线震铃结束"; 1967 break; 1968 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 1969 m_Line[6].Ring = 1; 1970 m_Line[6].TimeCount = 0; 1971 intRing = MessageBuffer.Parameter[0]; 1972 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 1973 break; 1974 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 1975 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "极性反转"; 1976 break; 1977 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 1978 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "拍叉结束"; 1979 break; 1980 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 1981 1982 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 6);//通道监听 1983 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(6, 0); //两路连接通话 1984 bll.SetModelValue("IsJieTing", "true", bll.GetModel(6.ToString())); 1985 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(6.ToString())); 1986 1987 string wavName = "[" + 6.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 1988 bll.SetModelValue("FileName", wavName, bll.GetModel(6.ToString())); 1989 1990 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(6, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 1991 1992 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音摘机"; 1993 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 1994 m_Line[6].HookOff = 1; 1995 m_Line[6].Ring = 0; 1996 m_Line[6].Status = STATUS.STATUS_RECORDING; 1997 break; 1998 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 1999 bll.SetModelValue("IsCall", "true", bll.GetModel(6.ToString())); 2000 bll.SetModelValue("6", 6.ToString(), bll.GetModel(6.ToString())); 2001 2002 m_Line[6].Ring = 1; 2003 m_Line[6].TimeCount = 0; 2004 intRing = MessageBuffer.Parameter[0]; 2005 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 2006 break; 2007 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 2008 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音断线"; 2009 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 2010 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 2011 m_Line[6].CallerID = ""; 2012 m_Line[6].Dtmf = ""; 2013 m_Line[6].HookOff = 0; 2014 m_Line[6].Ring = 0; 2015 break; 2016 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 2017 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音接线"; 2018 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 2019 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 2020 m_Line[6].CallerID = ""; 2021 m_Line[6].Dtmf = ""; 2022 m_Line[6].HookOff = 0; 2023 m_Line[6].Ring = 0; 2024 break; 2025 2026 } 2027 #endregion 2028 } 2029 else if (m_Line[6].Status == STATUS.STATUS_RECORDING) 2030 { 2031 #region STATUS_RECORDING 2032 switch (MessageCode) 2033 { 2034 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 2035 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(6, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 2036 { 2037 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 2038 { 2039 m_Line[6].Dtmf += Convert.ToString(ctemp[0]); 2040 dgv电话管理.Rows[6].Cells["callcode"].Value = m_Line[6].Dtmf; 2041 bll.SetModelValue("CallCodeList", m_Line[6].Dtmf, bll.GetModel(6.ToString())); 2042 } 2043 } 2044 break; 2045 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 2046 bll.SetModelValue("IsOverCall", "true", bll.GetModel(6.ToString())); 2047 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(6.ToString())); 2048 2049 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(6, 0); //两路断开通话 2050 GxVoiceAPI.GxVoice.GX_StopRecordVoice(6);//停止录音 2051 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 2052 2053 bll.SetModelValue("Date", DateDiff(bll.GetModel(6.ToString()).DateStart, bll.GetModel(6.ToString()).DateStop), bll.GetModel(6.ToString())); 2054 2055 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音挂机"; 2056 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 2057 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 2058 m_Line[6].CallerID = ""; 2059 m_Line[6].Dtmf = ""; 2060 m_Line[6].HookOff = 0; 2061 m_Line[6].Ring = 0; 2062 m_Line[6].Status = STATUS.STATUS_IDLE; 2063 2064 dgv电话管理.Rows[6].Cells["calldate"].Value = ""; 2065 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "空闲"; 2066 ctemp = new char[100]; 2067 break; 2068 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 2069 dgv电话管理.Rows[6].Cells["chanelstate"].Value = "录音断线"; 2070 dgv电话管理.Rows[6].Cells["callcode"].Value = ""; 2071 dgv电话管理.Rows[6].Cells["calltype"].Value = ""; 2072 m_Line[6].CallerID = ""; 2073 m_Line[6].Dtmf = ""; 2074 m_Line[6].HookOff = 0; 2075 m_Line[6].Ring = 0; 2076 GxVoiceAPI.GxVoice.GX_StopRecordVoice(6); 2077 m_Line[6].Status = STATUS.STATUS_IDLE; 2078 break; 2079 } 2080 #endregion 2081 } 2082 } 2083 private void xunhuan8(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, ushort MessageCode, uint intRing, char[] ctemp) 2084 { 2085 if (m_Line[7].Status == STATUS.STATUS_IDLE) 2086 { 2087 #region STATUS_IDLE 2088 switch (MessageCode) 2089 { 2090 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF方式的主叫事件 2091 //before hook off,dtmf is dtmf cid. 2092 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(7, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 2093 { 2094 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 2095 { 2096 m_Line[7].CallerID += ctemp[0].ToString(); 2097 bll.SetModelValue("CallCodeList", m_Line[7].Dtmf, bll.GetModel(7.ToString())); 2098 dgv电话管理.Rows[7].Cells["callcode"].Value = m_Line[7].CallerID; 2099 dgv电话管理.Rows[7].Cells["calltype"].Value = "呼入"; 2100 dgv电话管理.Rows[7].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 2101 } 2102 } 2103 break; 2104 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_DTMF://有DTMF方式的主叫事 2105 StringBuilder CallerIDString = new StringBuilder(256);//要取得出参 必须定义成StringBuilder 给内存分配空间 2106 if (GxVoiceAPI.GxVoice.GX_GetDTMFCallerID(7, CallerIDString) == GxVoiceAPI.GxVoice.GX_OK) 2107 { 2108 bll.SetModelValue("Call_Code", CallerIDString.ToString(), bll.GetModel(7.ToString())); 2109 ushort StopDTMF = GxVoiceAPI.GxVoice.GX_StopDetectDTMF(7);//停止检测DTMF按键 2110 ushort ClearDTMF = GxVoiceAPI.GxVoice.GX_ClearDTMFBuffer(7);//清除某一通道已经识别出来的但仍然没有被取走的DTMF按键。 2111 2112 GxVoiceAPI.GxVoice.GX_StartTimeOutForWindows(7, 50); 2113 } 2114 // common.EventName.Add("有DTMF方式的主叫事件"); 2115 break; 2116 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_CID_FSK: 2117 { 2118 char[] CIDdt = new char[50]; //来电时间 2119 char[] CIDTelNo = new char[50]; //主叫号码 2120 char[] CIDName = new char[50]; //主叫名字[一般没用] 2121 2122 if (GxVoiceAPI.GxVoice.GX_GetFskCallerID(7, CIDdt, CIDTelNo, CIDName) == GxVoiceAPI.GxVoice.GX_OK) 2123 { 2124 m_Line[7].CallerID = ""; 2125 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "外线来电"; 2126 GxVoiceAPI.GxVoice.GX_StartDetectCallerID(7);//接收FSK来电号码后,必需再调用此函数,否则下一个来电无法监测得到 2127 m_Line[7].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)).Trim("\0".ToCharArray()).Trim("\n".ToCharArray()); 2128 //m_Line[7].CallerID = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Unicode.GetBytes(CIDTelNo)); 2129 2130 dgv电话管理.Rows[7].Cells["callcode"].Value = m_Line[7].CallerID; 2131 dgv电话管理.Rows[7].Cells["calltype"].Value = "呼出"; 2132 dgv电话管理.Rows[7].Cells["calldate"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 2133 } 2134 } 2135 break; 2136 2137 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_END: 2138 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "放音结束"; 2139 break; 2140 case GxVoiceAPI.GxVoice.MESSAGE_PLAY_VOICE_EXIT: 2141 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "放音退出"; 2142 break; 2143 case GxVoiceAPI.GxVoice.MESSAGE_GENERATE_DTMF_END: 2144 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "发码结束"; 2145 break; 2146 case GxVoiceAPI.GxVoice.MESSAGE_SEND_FSK_END: 2147 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "FSK结束"; 2148 break; 2149 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DIAL_TONE: 2150 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "拨号音"; 2151 break; 2152 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BUSY_TONE: 2153 bll.ClearModel(bll.GetModel(7.ToString())); 2154 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "忙音"; 2155 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2156 dgv电话管理.Rows[7].Cells["calldate"].Value = ""; 2157 m_Line[7].HookOff = 1; 2158 m_Line[7].CallerID = ""; 2159 m_Line[7].Ring = 0; 2160 m_Line[7].Status = STATUS.STATUS_RECORDING; 2161 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2162 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "空闲"; 2163 ctemp = new char[100]; 2164 break; 2165 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_BACK_TONE: 2166 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "回铃音"; 2167 break; 2168 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TONE_DATA: 2169 break; 2170 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_HELLO_VOICE: 2171 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "爆发音"; 2172 break; 2173 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_SILENCE_DATA: 2174 if (MessageBuffer.Parameter[0] == 0) 2175 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "无声音"; 2176 else 2177 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "有声音"; 2178 break; 2179 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_TIME_OUT: 2180 bll.ClearModel(bll.GetModel(7.ToString())); 2181 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "超时"; 2182 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2183 dgv电话管理.Rows[7].Cells["calldate"].Value = ""; 2184 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2185 m_Line[7].HookOff = 1; 2186 m_Line[7].CallerID = ""; 2187 m_Line[7].Ring = 0; 2188 m_Line[7].Status = STATUS.STATUS_RECORDING; 2189 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2190 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "空闲"; 2191 ctemp = new char[100]; 2192 break; 2193 2194 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_OFF: 2195 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "内线摘机"; 2196 break; 2197 case GxVoiceAPI.GxVoice.MESSAGE_USER_HOOK_ON: 2198 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "内线挂机"; 2199 break; 2200 case GxVoiceAPI.GxVoice.MESSAGE_USER_PICK_UP: 2201 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "内线拍叉"; 2202 break; 2203 case GxVoiceAPI.GxVoice.MESSAGE_USER_RING_END: 2204 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "内线震铃结束"; 2205 break; 2206 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_RING: 2207 m_Line[7].Ring = 1; 2208 m_Line[7].TimeCount = 0; 2209 intRing = MessageBuffer.Parameter[0]; 2210 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "外线震铃" + Convert.ToString(intRing); 2211 break; 2212 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_POLE: 2213 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "极性反转"; 2214 break; 2215 case GxVoiceAPI.GxVoice.MESSAGE_TRUNK_PICK_UP_END: 2216 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "拍叉结束"; 2217 break; 2218 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_OFF: 2219 2220 ushort listen = GxVoiceAPI.GxVoice.GX_ListenChannel(0, 7);//通道监听 2221 ushort link = GxVoiceAPI.GxVoice.GX_SetLink(7, 0); //两路连接通话 2222 bll.SetModelValue("IsJieTing", "true", bll.GetModel(7.ToString())); 2223 bll.SetModelValue("DateStart", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(7.ToString())); 2224 2225 string wavName = "[" + 7.ToString() + "]" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".wav"; 2226 bll.SetModelValue("FileName", wavName, bll.GetModel(7.ToString())); 2227 2228 GxVoiceAPI.GxVoice.GX_StartRecordWaveFile(7, "C:\\voice\\" + wavName, 0, 0xFFFFFFFF, (char)0x00); 2229 2230 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音摘机"; 2231 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2232 m_Line[7].HookOff = 1; 2233 m_Line[7].Ring = 0; 2234 m_Line[7].Status = STATUS.STATUS_RECORDING; 2235 break; 2236 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_RING: 2237 bll.SetModelValue("IsCall", "true", bll.GetModel(7.ToString())); 2238 bll.SetModelValue("7", 7.ToString(), bll.GetModel(7.ToString())); 2239 2240 m_Line[7].Ring = 1; 2241 m_Line[7].TimeCount = 0; 2242 intRing = MessageBuffer.Parameter[0]; 2243 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音震铃" + Convert.ToString(intRing); 2244 break; 2245 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 2246 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音断线"; 2247 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2248 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2249 m_Line[7].CallerID = ""; 2250 m_Line[7].Dtmf = ""; 2251 m_Line[7].HookOff = 0; 2252 m_Line[7].Ring = 0; 2253 break; 2254 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_NO_OPEN_CIRCLE: 2255 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音接线"; 2256 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2257 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2258 m_Line[7].CallerID = ""; 2259 m_Line[7].Dtmf = ""; 2260 m_Line[7].HookOff = 0; 2261 m_Line[7].Ring = 0; 2262 break; 2263 2264 } 2265 #endregion 2266 } 2267 else if (m_Line[7].Status == STATUS.STATUS_RECORDING) 2268 { 2269 #region STATUS_RECORDING 2270 switch (MessageCode) 2271 { 2272 case GxVoiceAPI.GxVoice.MESSAGE_HAVE_DTMF: //DTMF按键事件 2273 if (GxVoiceAPI.GxVoice.GX_GetDTMFKey(7, 1, ctemp) == GxVoiceAPI.GxVoice.GX_OK) 2274 { 2275 if ((ctemp[0] >= 0x30) && ctemp[0] <= 0x39) //0-9 2276 { 2277 m_Line[7].Dtmf += Convert.ToString(ctemp[0]); 2278 dgv电话管理.Rows[7].Cells["callcode"].Value = m_Line[7].Dtmf; 2279 bll.SetModelValue("CallCodeList", m_Line[7].Dtmf, bll.GetModel(7.ToString())); 2280 } 2281 } 2282 break; 2283 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_HOOK_ON: 2284 bll.SetModelValue("IsOverCall", "true", bll.GetModel(7.ToString())); 2285 bll.SetModelValue("DateStop", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), bll.GetModel(7.ToString())); 2286 2287 ushort linkover = GxVoiceAPI.GxVoice.GX_ClearLink(7, 0); //两路断开通话 2288 GxVoiceAPI.GxVoice.GX_StopRecordVoice(7);//停止录音 2289 GxVoiceAPI.GxVoice.GX_UnListenChannel(0);//停止监听 2290 2291 bll.SetModelValue("Date", DateDiff(bll.GetModel(7.ToString()).DateStart, bll.GetModel(7.ToString()).DateStop), bll.GetModel(7.ToString())); 2292 2293 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音挂机"; 2294 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2295 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2296 m_Line[7].CallerID = ""; 2297 m_Line[7].Dtmf = ""; 2298 m_Line[7].HookOff = 0; 2299 m_Line[7].Ring = 0; 2300 m_Line[7].Status = STATUS.STATUS_IDLE; 2301 2302 dgv电话管理.Rows[7].Cells["calldate"].Value = ""; 2303 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "空闲"; 2304 ctemp = new char[100]; 2305 break; 2306 case GxVoiceAPI.GxVoice.MESSAGE_RECORD_OPEN_CIRCLE: 2307 dgv电话管理.Rows[7].Cells["chanelstate"].Value = "录音断线"; 2308 dgv电话管理.Rows[7].Cells["callcode"].Value = ""; 2309 dgv电话管理.Rows[7].Cells["calltype"].Value = ""; 2310 m_Line[7].CallerID = ""; 2311 m_Line[7].Dtmf = ""; 2312 m_Line[7].HookOff = 0; 2313 m_Line[7].Ring = 0; 2314 GxVoiceAPI.GxVoice.GX_StopRecordVoice(7); 2315 m_Line[7].Status = STATUS.STATUS_IDLE; 2316 break; 2317 } 2318 #endregion 2319 } 2320 } 2321 #endregion 2322 2323 #region 动作注释 2324 2325 #endregion 2326 2327 #region 开始点球准备工作 2328 /// <summary> 2329 /// 开始点球准备工作 2330 /// </summary> 2331 /// <param name="action"></param> 2332 public void RunBallReadyAction(ushort ChannelNo) 2333 { 2334 switch (m_Line[ChannelNo].Status) 2335 { 2336 //点球开始准备动作 2337 case STATUS.STATUS_IDLE: 2338 // RunBallStartReadyAction(); 2339 break; 2340 //点球完成准备动作 2341 case STATUS.STATUS_RECORDING: 2342 2343 break; 2344 default: 2345 break; 2346 } 2347 } 2348 #endregion 2349 2350 #region 开始点球 2351 /// <summary> 2352 /// 开始点球 2353 /// </summary> 2354 /// <param name="ChannelNo"></param> 2355 public void RunBall(GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer, uint intRing, char[] ctemp) 2356 { 2357 ushort caller = GxVoiceAPI.GxVoice.GX_StartDetectCallerID(0); 2358 ushort dtmf = GxVoiceAPI.GxVoice.GX_StartDetectDTMF(MessageBuffer.ChannelNo, 1);//识别按键 2359 switch (MessageBuffer.ChannelNo) 2360 { 2361 case 0: 2362 //本地 2363 xunhuan1(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2364 break; 2365 case 1: 2366 //张佳 2367 xunhuan2(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2368 break; 2369 case 2: 2370 //田洪帅 2371 xunhuan3(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2372 break; 2373 case 3: 2374 //刘聪 2375 xunhuan4(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2376 break; 2377 case 4: 2378 //王毅力 2379 xunhuan5(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2380 break; 2381 case 5: 2382 //李姐 2383 xunhuan6(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2384 break; 2385 case 6: 2386 //张睿 2387 xunhuan7(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2388 break; 2389 case 7: 2390 xunhuan8(MessageBuffer, MessageBuffer.MessageCode, intRing, ctemp); 2391 break; 2392 default: 2393 break; 2394 } 2395 } 2396 #endregion 2397 2398 /// <summary> 2399 /// 这个是裁判(用死循环来做裁判的实时监督权限) 2400 /// </summary> 2401 private void StartCardWorkNew() 2402 { 2403 try 2404 { 2405 while (true) 2406 { 2407 Thread.Sleep(200); 2408 GxVoiceAPI.GxVoice.GX_MESSAGE_INFO MessageBuffer; 2409 char[] ctemp = new char[100]; 2410 uint intRing = 0; 2411 #region 判断球员是否有犯规 2412 while (GxVoiceAPI.GxVoice.GX_GetMessageForWindows(5, out MessageBuffer) == GxVoiceAPI.GxVoice.GX_OK) 2413 { 2414 #region 如果犯规了,开始指定犯规的线程球员进行点球 2415 //this.Invoke(RunBall, ChannelNo); 2416 this.BeginInvoke(_dRunBall, MessageBuffer, intRing, ctemp); 2417 // RunBall(MessageBuffer, intRing, ctemp); 2418 #endregion 2419 2420 } 2421 #endregion 2422 2423 } 2424 } 2425 catch (Exception ex) 2426 { 2427 MessageBox.Show(ex.ToString()); 2428 } 2429 } 2430 2431 private void timer1_Tick(object sender, EventArgs e) 2432 { 2433 int i; 2434 for (i = 0; i < m_TotalVoiceChannel; i++) 2435 { 2436 if (m_Line[i].Ring == 1) 2437 { 2438 m_Line[i].TimeCount++; 2439 if (m_Line[i].TimeCount > 6) 2440 { 2441 dgv电话管理.Rows[i].Cells["chanelstate"].Value = "空闲"; 2442 dgv电话管理.Rows[i].Cells["callcode"].Value = ""; 2443 dgv电话管理.Rows[i].Cells["calltype"].Value = "空闲"; 2444 dgv电话管理.Rows[i].Cells["calldate"].Value = ""; 2445 m_Line[i].CallerID = ""; 2446 m_Line[i].Dtmf = ""; 2447 m_Line[i].HookOff = 0; 2448 m_Line[i].Ring = 0; 2449 m_Line[i].Status = STATUS.STATUS_IDLE; 2450 } 2451 } 2452 } 2453 } 2454 2455 #region 返回时间差 2456 public static string DateDiff(DateTime DateTime1, DateTime DateTime2) 2457 { 2458 string dateDiff = null; 2459 try 2460 { 2461 TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); 2462 TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); 2463 TimeSpan ts = ts1.Subtract(ts2).Duration(); 2464 string hours = ts.Hours.ToString(), minutes = ts.Minutes.ToString(), seconds = ts.Seconds.ToString(); 2465 if (ts.Hours < 10) 2466 { 2467 hours = "0" + ts.Hours.ToString(); 2468 } 2469 if (ts.Minutes < 10) 2470 { 2471 minutes = "0" + ts.Minutes.ToString(); 2472 } 2473 if (ts.Seconds < 10) 2474 { 2475 seconds = "0" + ts.Seconds.ToString(); 2476 } 2477 dateDiff = hours + ":" + minutes + ":" + seconds; 2478 } 2479 catch 2480 { 2481 2482 } 2483 return dateDiff; 2484 } 2485 #endregion 2486 2487 private void TelManagerTest_FormClosing(object sender, FormClosingEventArgs e) 2488 { 2489 if (MessageBox.Show("你真的要退出系统吗?", "C# Demo", MessageBoxButtons.YesNo) == DialogResult.No) 2490 { 2491 e.Cancel = true; 2492 } 2493 } 2494 2495 private void TelManagerTest_FormClosed(object sender, FormClosedEventArgs e) 2496 { 2497 Application.Exit(); 2498 Application.ExitThread(); 2499 System.Environment.Exit(0); 2500 ReleaseGxVoice(); 2501 } 2502 } 2503 }