模拟拨号软件(直接拨打电话)该如何做

模拟拨号软件(直接拨打电话)该怎么做
背景:现在的火车票可以电话订购,但是拨打电话需要按一大堆数字,面对热门车次少一疏忽就会错过
方案:程序实现自动拨号,包括进子菜单,只需要在验证码的时候手动操作一下,理论上一个串口调试程序都可以实现,但我发现不用at+vts=n几乎无法实现DTMF
实现:我现在手头上笔记本自带个Motorola SM56 (Motorola SM56 V.90 PCI Data/Fax Soft Modem) 

摩托罗拉SM56主要性能
类型 普通拨号调制解调器
类别 内置型
接口类型 PCI
传输速率 56Kbps
传输协议 V.90
标准AT指令集 支持Hayes AT指令集
纠错控制 V.42,MNP2-4
数据压缩协议 MNP5,V.42bis
芯片 Motorola
传真/协议 Group III,Class 1 V.17 V.29 V.27ter V.21
语音功能 DTMF、录音功能

使用串口调试助手可以拨通电话,但是无法进行后续操作
at+vts=1 命令之后没一点反应

查找资料
http://topic.csdn.net/t/20030617/12/1924950.html
用apro控件中的 ApdTapiDevice 的sendtone 方法发送按键;非常简单!哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈啊哈哈哈哈哈哈 
-----------------------------邪恶的分隔符-----------------------------

我编译之后拨号神马的可以正常使用,但是
C# code

axApax1.TapiSendTone("1");
axApax1.TapiPlayWaveFile("F:\\Temp\\sound\\Choice1.wav");


这两个都是直接出错,分别是invalid call handle 和 ...
调用之前都做了设定
C# code

axApax1.TapiSelectDevice();
axApax1.EnableVoice = true;
axApax1.TapiAnswer();


让我百思不得其解

之后我又找了一个方法,使用微软的SerialPort,这个就是直接发送AT指令,可能由于之前的at+vts=1无法执行,所以还是以失败告终

但是通过modem的参数可以看到,它肯定是支持DTMF的,现在该怎么实现呢,最好是一个DTMF的控件

疑惑:Hayes AT指令集到底包不包含vt+vts=n,个人查看资料更倾向于不包含,但modem实际上又是支持DTMF,at+vts实际上是生成 DTMF 和音频的,如果不支持at+vts,那modem的硬件功能如何来实现?

   

PS1:个人不是搞网络的,对这方面都不太懂,可能有些概念错误,还请指正

PS2:灌水回复通通不给分,给马甲也不糟蹋了,现在CSDN一堆人灌水的,看着都心烦

------解决方案--------------------
最终还是被水了,没有实质性的回答。。。