C# 拨打电话

tansuozhev 2011-07-16 10:12:23
现在有一台笔记本,一条电话线,可以通过调制解调打电话,我想用C#实现自动拨打电话,,求教这方面的知识。
...全文
228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小志 2011-07-22
  • 打赏
  • 举报
回复
主要是这个方法:public int DialTelphone(string number) 实现拨号。
InitializeTapi3();//初始化TAPI的一些设置
小志 2011-07-22
  • 打赏
  • 举报
回复
下面的代码汲及到我的一些业务处理,仔细研究后提取你需要的代码:
using System;
using TAPI3Lib;
using GZITMS.SysCommon;
using GZITMS.TEL.UI;

namespace GZITMS.TEL.Business {
/// <summary>
/// TAPITelphone 的摘要说明。
/// </summary>
public class TAPITelphone {
private const int mtAudio = 8;
private const int mtModem = 16;
private delegate void CloseResource();
private CallForm callForm;
private TAPIClass tapiObj;
private ITBasicCallControl newCall;
private int regResult;
private ITAddress modemAddr;
public ITAddress ModemAddress {
get { return modemAddr; }
}

public TAPITelphone(CallForm form) {
callForm = form;
}

public void InitializeTapi3() {
try {
tapiObj = new TAPIClass();
int mediaTypes = 0;

tapiObj.Initialize();
ITCollection addrCollection = (ITCollection)tapiObj.Addresses;
ITMediaSupport mediaSupport;

foreach(ITAddress addr in addrCollection) {
if(addr.State == ADDRESS_STATE.AS_INSERVICE) {
mediaSupport = (ITMediaSupport)addr;
mediaTypes = mediaSupport.MediaTypes;

if((mediaTypes & mtModem) == mtModem) {
if((mediaTypes & mtAudio) == mtAudio) {
modemAddr = addr;
break;
}
}
}
}

tapiObj.ITTAPIEventNotification_Event_Event += new ITTAPIEventNotification_EventEventHandler(tapiObj_ITTAPIEventNotification_Event_Event);

if(null != modemAddr) {
regResult = tapiObj.RegisterCallNotifications(modemAddr,true,true,TapiConstants.TAPIMEDIATYPE_AUDIO,2);
}
tapiObj.EventFilter = (int)(TAPI_EVENT.TE_CALLSTATE);
} catch(Exception ex) {
Global.mainLog.Error("初始化Modem出错",ex);
}
}

private void tapiObj_ITTAPIEventNotification_Event_Event(TAPI_EVENT TapiEvent, object pEvent) {
try {
switch(TapiEvent) {
case TAPI_EVENT.TE_CALLSTATE :
ITCallStateEvent icse = (ITCallStateEvent)pEvent;
ITCallInfo ici = icse.Call;

switch(ici.CallState) {
case CALL_STATE.CS_DISCONNECTED :
if(null != callForm) {
callForm.BeginInvoke(new CloseResource(HandUpTelphone));
}
break;
}
break;
}
} catch(Exception ex) {
Global.mainLog.Error("ITTAPIEventNotification_Event出错",ex);
}
}

public int DialTelphone(string number) {
int type = 0;
try {
if(null == tapiObj) {
InitializeTapi3();
}

if(null == modemAddr) {
if(null != callForm) {
callForm.Close();
callForm.Dispose();
}
return type;
}

newCall = modemAddr.CreateCall(number,TapiConstants.LINEADDRESSTYPE_PHONENUMBER,
TapiConstants.TAPIMEDIATYPE_DATAMODEM);
newCall.Connect(false);
type = 1;
} catch(Exception ex) {
Global.mainLog.Error("通过Modem拨打电话出错",ex);
}
return type;
}

public void HandUpTelphone() {
try {
if(null != newCall) {
newCall.Disconnect(DISCONNECT_CODE.DC_NORMAL);
newCall = null;
}

modemAddr = null;
if(null != tapiObj) {
tapiObj.UnregisterNotifications(regResult);
tapiObj.Shutdown();
tapiObj = null;
}

if(null != callForm) {
callForm.State = PhoneState.HangUp;
callForm.Close();
callForm.Dispose();
}
} catch(Exception ex) {
Global.mainLog.Error("挂断电话出错",ex);
}
}
}
}
小志 2011-07-22
  • 打赏
  • 举报
回复
google搜索TAPI 拨打电话,很多例子
tansuozhev 2011-07-18
  • 打赏
  • 举报
回复
有没有谁能提供一些serialport类的信息,来拨打电话,简明扼要,网上很多不明白
hackerqi 2011-07-17
  • 打赏
  • 举报
回复
要有modem的二次开放文档,API什么的,底层调用他的驱动
lizhibin11 2011-07-17
  • 打赏
  • 举报
回复
ATD**********
龟叔啊 2011-07-17
  • 打赏
  • 举报
回复
顶 学习中!
tansuozhev 2011-07-17
  • 打赏
  • 举报
回复
能再说详细一些吗?
菲儿 2011-07-17
  • 打赏
  • 举报
回复
坐等。。。更详细的解答~http://www.henhaozhao.com

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧