C# 用TAPI拨打电话``

这段代码展示了如何使用C#的TAPI库进行拨打电话。首先,初始化TAPI并打开线路,然后协商API版本并打开电话线路,最后调用lineMakeCall函数拨打电话号码。挂断电话时,使用lineDrop关闭线路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  //拨打

    private void call()
        {
            if (this.numText.Text == "")
            {
                MessageBox.Show("号码不能为空");
                return;
            }
            if (flag != 0)
            {
                close();
            }
            long ret = -1;

            UInt32 dw = 0;
            UInt32 ver = 0x00020000;
            line.dwTotalSize = (uint)Marshal.SizeOf(line);
            line.dwOptions = 0x00000002;
            ret = lineInitializeEx(out h, IntPtr.Zero, IntPtr.Zero, "Tapi", out dw, ref ver, ref line);
            if (ret != 0)
            {
                MessageBox.Show("初始化失败");
                return;
            }

            LINEEXTENSIONID lineext;

            UInt32 dwCallbackInstance = 0;
            for (int dwD = 0; dwD < dw; dwD++)
            {
                ret = lineNegotiateAPIVersion(h, dwD, 0x00020000, 0x00020001, out ver, out lineext);
                if (ret == 0)
                {
                    ret = lineOpen(h, dwD, out hLine, ver, 0, dwCallbackInstance, 0x00000001, 0, 0);
                    break;
                }
            }


            if (ret == 0)
            {
                //tag.dwBearerMode = 0;
                ret = lineMakeCall(hLine, out hCall,  "189********", 0, 0);
                if (ret > 0)
                {
                    flag = 1;
                    callButton.Enabled = false;
                }
            }
        }

 

  // 挂机

  public void close()
        {
            lineDrop(hCall, IntPtr.Zero, 0);
            lineClose(hLine);
            lineShutdown(h);
            callButton.Enabled = true;
            flag = 0;
        }

 public struct LINEEXTENSIONID
        {

            public IntPtr dwExtensionID0;

            public IntPtr dwExtensionID1;

            public IntPtr dwExtensionID2;

            public IntPtr dwExtensionID3;

        }

        public struct LINEINITIALIZEEXPARAMS
        {

            public uint dwTotalSize;

            public uint dwNeededSize;

            public uint dwUsedSize;

            public uint dwOptions;

            public System.IntPtr hEvent;

            public System.IntPtr hCompletionPort;

            public uint dwCompletionKey;

        }

 

  #region Invoked Native Functions

        [DllImport("coredll.dll")]
        private static extern int lineInitializeEx(
            out IntPtr hLineApp,
            IntPtr hAppHandle,
            IntPtr lCallBack,
            string FriendlyAppName,
            out System.UInt32 NumDevices,
            ref System.UInt32 APIVersion,
            ref LINEINITIALIZEEXPARAMS lineExInitParams);

        [DllImport("coredll")]
        private static extern int lineNegotiateAPIVersion(IntPtr m_hLineApp, int
        dwDeviceID, int dwAPILowVersion, int dwAPIHighVersion, out System.UInt32 lpdwAPIVersion,
        out   LINEEXTENSIONID lpExtensionID);

        [DllImport("coredll")]
        public static extern int lineOpen(IntPtr m_hLineApp, int dwDeviceID, out              
        IntPtr lphLine, uint dwAPIVersion, int dwExtVersion, System.UInt32
        dwCallbackInstance,
        int dwPrivileges, int dwMediaModes, int lpCallParams);

        [DllImport("coredll")]
        public static extern int lineMakeCall(IntPtr lphLine, out IntPtr hCall, string number, int a, int b);

        [DllImport("coredll")]
        public static extern int lineDrop(IntPtr hCall, IntPtr c, int d);

        [DllImport("coredll")]

        public static extern int lineClose(IntPtr hLine);

        [DllImport("coredll")]

        public static extern int lineShutdown(IntPtr m_hLineApp);

        #endregion

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值