⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.vb

📁 三汇CTI示例程序源码
💻 VB
📖 第 1 页 / 共 3 页
字号:
        Me.Controls.Add(Me.ComboBox1)
        Me.Controls.Add(Me.RadioButton1)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.ListView1)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.RadioButton2)
        Me.Controls.Add(Me.RadioButton3)
        Me.Controls.Add(Me.RadioButton4)
        Me.Controls.Add(Me.RadioButton5)
        Me.Controls.Add(Me.RadioButton6)
        Me.Controls.Add(Me.Button2)
        Me.MaximizeBox = False
        Me.Name = "Form1"
        Me.Text = "SHR_DEvent"
        CType(Me.Timer1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged

    End Sub
    Public Sub ThreadHandleEvent()
        Dim pucBuffer As IntPtr
        Dim SsmEvent As SSM_EVENT
        Dim szErrMsg As String
        Dim nretWaitForEvent As Integer

        pucBuffer = Marshal.AllocHGlobal(100)

        Do While True

            SsmEvent.pvBuffer = pucBuffer
            SsmEvent.dwBufferLength = MAX_BUFFERLEN
            nretWaitForEvent = SsmWaitForEventA(50, SsmEvent)

            If (nretWaitForEvent = 0) Then
                Me.EventHandler(SsmEvent)
            ElseIf (nretWaitForEvent = -2) Then
                Exit Do
            End If

        Loop

        Marshal.FreeHGlobal(pucBuffer)

    End Sub
    Public Sub EventHandler(ByRef pEvent As SSM_EVENT)
        Dim dwCondition As Int32
        Dim strTemp As String
        Dim ch As Int32
        dwCondition = pEvent.dwParam And &HFFFF& 'Reason of state transfer; 
        ch = pEvent.nReference     'channel number;
        Dim nIndex As Int32

        Select Case (ChannelState(ch).WorkState)   'Judge state

            Case CH_IDLE 'Idle state

                Select Case (pEvent.wEventCode)   'Judge event

                    Case E_CHG_ChState

                        If ((pEvent.dwParam And &HFFFF&) = TRUNK_STATUS.S_CALL_OFFLINE) Then 'Judge channel state 				 
                            ChannelState(ch).Dir = UNKNOWN
                            ChannelState(ch).WorkState = CH_OFFLINE
                            ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}
                            ClearCallID(pEvent) 'Clear phone number buffer
                        End If

                    Case E_RCV_DSTDChannel

                        Select Case (pEvent.dwParam)  'Judge D-Channel event

                            Case DST_OFFHOOK
                                ChannelState(ch).Dir = UP
                                ChannelState(ch).WorkState = CH_ACTIVE
                                ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}
                                ClearCallID(pEvent) 'Clear phone number buffer
                                StartRecord(ch)  'Start record

                            Case DST_RING_ON
                                ChannelState(ch).Dir = DOWN
                                ChannelState(ch).WorkState = CH_RING
                                ClearCallID(pEvent) 'Clear phone number buffer
                                ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}

                            Case DST_MSG_CHG
                                strTemp = Marshal.PtrToStringAnsi(pEvent.pvBuffer, pEvent.dwDataLength)
                                ChannelState(ch).Lcd = System.Text.Encoding.Default.GetBytes(strTemp)
                                ChannelState(ch).LCDLen = pEvent.dwDataLength
                        End Select

                End Select



            Case CH_RING

                Select Case (pEvent.wEventCode)

                    Case E_CHG_ChState

                        If (pEvent.dwParam And &HFFFF&) = TRUNK_STATUS.S_CALL_OFFLINE Then 'Judge channel state 				 
                            ChannelState(ch).Dir = UNKNOWN
                            ChannelState(ch).WorkState = CH_OFFLINE
                            ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}
                            ClearCallID(pEvent) 'Clear phone number buffer
                        End If

					case E_RCV_DSTDChannel:

                        Select Case (pEvent.dwParam)

                            Case DST_RING_OFF
                                ChannelState(ch).Dir = UNKNOWN
                                ChannelState(ch).WorkState = CH_IDLE
                                GetCallID(pEvent)   'Get phone number

                            Case DST_OFFHOOK
                                ChannelState(ch).Dir = DOWN
                                ChannelState(ch).WorkState = CH_ACTIVE
                                StartRecord(ch)

                            Case DST_MSG_CHG
                                strTemp = Marshal.PtrToStringAnsi(pEvent.pvBuffer, pEvent.dwDataLength)
                                ChannelState(ch).Lcd = System.Text.Encoding.Default.GetBytes(strTemp)
                                ChannelState(ch).LCDLen = pEvent.dwDataLength
                        End Select

                End Select

            Case CH_ACTIVE

                Select Case (pEvent.wEventCode)

                    Case E_CHG_ChState

                        If ((pEvent.dwParam & &HFFFF&) = TRUNK_STATUS.S_CALL_OFFLINE) Then 'Judge channel state 				 
                            ChannelState(ch).Dir = UNKNOWN
                            ChannelState(ch).WorkState = CH_OFFLINE
                            ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}
                            ClearCallID(pEvent) 'Clear phone number buffer

                            If (ChannelState(ch).IsRecord <> 0) Then
                                StopRecord(ch)    'Stop record
                            End If
                        End If

                    Case E_RCV_DSTDChannel

                        Select Case (pEvent.dwParam)

                            Case DST_ONHOOK
                                ChannelState(ch).Dir = UNKNOWN
                                ChannelState(ch).WorkState = CH_IDLE
                                GetCallID(pEvent)
                                StopRecord(ch)

                            Case DST_MSG_CHG
                                strTemp = Marshal.PtrToStringAnsi(pEvent.pvBuffer, pEvent.dwDataLength)
                                ChannelState(ch).Lcd = System.Text.Encoding.Default.GetBytes(strTemp)
                                ChannelState(ch).LCDLen = pEvent.dwDataLength

                            Case DST_ABANDONED
                                ChannelState(ch).WorkState = CH_WAITFOR_ONHOOK
                                GetCallID(pEvent)
                                StopRecord(ch)

                        End Select
                End Select

            Case CH_OFFLINE

                If ((pEvent.wEventCode = E_CHG_ChState) And ((pEvent.dwParam And &HFFFF&) = TRUNK_STATUS.S_CALL_STANDBY)) Then
                    ChannelState(ch).Dir = UNKNOWN
                    ChannelState(ch).Lcd = New Byte(MAX_LCD_LEN) {}
                    ChannelState(ch).WorkState = CH_IDLE
                    ClearCallID(pEvent) 'Clear phone number buffer
                End If

            Case CH_WAITFOR_ONHOOK

                Select Case (pEvent.wEventCode)

                    Case E_CHG_ChState

                        If ((pEvent.dwParam And &HFFFF&) = TRUNK_STATUS.S_CALL_OFFLINE) Then 'Judge channel state 				 
                            ChannelState(ch).Dir = UNKNOWN
                            ChannelState(ch).WorkState = CH_OFFLINE

                            If (ChannelState(ch).IsRecord <> 0) Then
                                StopRecord(ch) 'Stop record
                            End If
                        End If

                    Case E_RCV_DSTDChannel

                        Select Case (pEvent.dwParam)

                            Case DST_ONHOOK
                                ChannelState(ch).Dir = UNKNOWN
                                ChannelState(ch).WorkState = CH_IDLE
		
                            Case DST_MSG_CHG
                                strTemp = Marshal.PtrToStringAnsi(pEvent.pvBuffer, pEvent.dwDataLength)
                                ChannelState(ch).Lcd = System.Text.Encoding.Default.GetBytes(strTemp)
                                ChannelState(ch).LCDLen = pEvent.dwDataLength
                        End Select
                End Select
        End Select
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ListView1.View = View.Details
        Me.ListView1.HeaderStyle = ColumnHeaderStyle.Clickable
        Me.ListView1.MultiSelect = True
        Me.ListView1.FullRowSelect = True
        Me.ListView1.GridLines = True
        Me.ListView1.Columns.Add("Channel num", 80, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("Channel state", 90, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("Listen state", 90, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("Record state", 85, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("Phone num", 70, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("LCD info", 230, HorizontalAlignment.Center)
        Me.ListView1.Columns.Add("Call direction", 100, HorizontalAlignment.Center)

        'load configuration file and initialize system
        If (SsmStartCti("ShConfig.ini", "ShIndex.ini") = -1) Then
            MsgBox(SsmGetLastErrMsgA())
            Return
        End If
        'Judge if the number of initialized boards is the same as
        'that of boards specified in the configuration file
        If (SsmGetMaxUsableBoard() <> SsmGetMaxCfgBoard()) Then
            MsgBox(SsmGetLastErrMsgA())
            Return
        End If

        MaxLine = SsmGetMaxCh()
        If (MaxLine = -1) Then
            MsgBox("Fail to call SsmGetMaxCh")
            Return
        End If
        'Set event-mode
        Dim EventSet As EVENT_SET_INFO
        EventSet.dwWorkMode = 1

        If (SsmSetEvent(-1, -1, True, EventSet) = -1) Then
            MsgBox("Fail to call SsmSetEvent")
            Return
        End If

        ListenChannel = MaxLine
        InitChannelState()                            'Initialize channel info

        Timer1.Enabled = True
        ThreadHandle = New Thread(New ThreadStart(AddressOf ThreadHandleEvent))
        ThreadHandle.Start()

        nRecFormat = -1 'default format
        RadioButton1.Checked = True
        RadioButton2.Checked = False
        RadioButton3.Checked = False
        RadioButton4.Checked = False
        RadioButton5.Checked = False
        RadioButton6.Checked = False

    End Sub
    Public Sub InitChannelState()
        Dim nGetChType As Int32
        Dim nChState As Int32
        Dim i As Int32
        For i = 0 To MaxLine - 1

            nGetChType = SsmGetChType(i)     'Get channel type
            If (nGetChType = -1) Then
                MsgBox(SsmGetLastErrMsgA())
            End If

            If (nGetChType = 12) Then 'Digital telephone record channel  
                ChannelState(i).WorkState = CH_IDLE   'Off line state 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -