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

📄 module1.bas

📁 演示用VB怎样取电话来电显示号码
💻 BAS
字号:
Attribute VB_Name = "Module1"
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

'功能:开启“话录通”
'参数:1 port 端口号(64-71USB口),ap接收fsk需要调整,可调整的参数(2,3,4);
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_InitializeSystem(int port,Char app)
Declare Function LT_InitializeSystem Lib "LTMainDll.DLL" (ByVal port As Long, ByVal ap As Long) As Long

'功能:关闭“话录通”
'参数:1 port 端口号(64-71USB口)
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_CloseSystem(int port)
Declare Function LT_CloseSystem Lib "LTMainDll.DLL" (ByVal port As Long) As Long

'功能:拨打电话(影响到摘挂机状态)
'参数:1 port 端口号(64-71USB口);2 电话号码字符串(目前可处理:‘0-9,‘*’,‘#’,‘~’延时,‘,’:500ms,‘ ’:1000ms,‘(’,‘)’,‘-’)
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_DialNumber(int port,UCHAR *Numbers)
Declare Function LT_DialNumber Lib "LTMainDll.DLL" (ByVal port As Long, ByVal Numbers As String) As Long

'功能:得到电话号码
'参数:1 port 端口号(64-71USB口)
'返回值:电话号码
'vc函数原型:EXTERN_C BSTR WINAPI LT_GetCallerID(int port)
Declare Function LT_GetCallerID Lib "LTMainDll.DLL" (ByVal port As Long) As Long

'功能:摘挂机//扩展功能,基本用不到,不建议使用
'参数:1 port 端口号(64-71USB口);2 flag 1 挂机,0 摘机
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_TelHookOnOff(int port,UCHAR flag = True)
Declare Function LT_TelHookOnOff Lib "LTMainDll.DLL" (ByVal port As Long, ByVal flag As Byte) As Long

'功能:设定回调函数
'参数:1 fPost2User 回调函数地址;2 getall=0(默认)
'返回值:1 成功;0 失败。
'vc函数原型:void WINAPI LT_SetCallbackFun(void (__stdcall  * fPost2User)(unsigned int),int getall=FALSE)
Declare Sub LT_SetCallbackFun Lib "LTMainDll.DLL" (ByVal fPost2User As Long, ByVal getall As Long)

'typedef struct _state_now{
'    unsigned char ifTel:1;
'    unsigned char ifRing:1;
'    unsigned char ifError:1;
'    unsigned char ifDtmf:1;
'    unsigned char dtmf:4;
'    unsigned char hd;
'} STATE_NOW;

'功能:查询状态
'参数:1 port, 端口号(0-7 对应 USB口的64-71),state 状态
'返回值:1 成功;0 失败。
'vc函数原型:int WINAPI GetKHTState(int port, STATE_NOW * state)
Declare Sub GetKHTState Lib "LTShowRec.DLL" (ByVal port As Long, ByRef state As Integer)

'功能:得到USB数据  正常情况不用考虑的函数
'参数:1 port 端口号(0-7 对应 USB口的64-71);2 8个数据(BYTE)
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_GetHardWareData(int port,UCHAR *data)
Declare Function LT_GetHardWareData Lib "LTMainDll.DLL" (ByVal port As Long, ByRef data As Byte) As Long

'功能:设定控制字
'参数:1 port 端口号(0-7 对应 USB口的64-71);(func 功能:Data 数据)
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_SetChannelNumber(int port,int func,int Data)
Declare Function LT_SetChannelNumber Lib "LTMainDll.DLL" (ByVal port As Long, ByVal func As Long, ByVal data As Long) As Long


'功能(USB):验证ID 用于硬件对软件的简单加密
'参数:1 port 端口号(0-7 对应 USB口的64-71);2 id 验证数据
'返回值:1 成功;0 失败。
'vc函数原型:int  WINAPI LT_CheckSerialNo(int port, long id)
Declare Function LT_CheckSerialNo Lib "LTMainDll.DLL" (ByVal port As Long, ByVal id As Long) As Long

'功能(USB):单健拨号
'参数: port 端口号(64-128USB口);2 data 拨号数据
'返回值:1 成功;0 失败。
'vc函数原型:int WINAPI DiaDTMF(int port, unsigned char data)
Declare Function DiaDTMF Lib "LTShowRec.DLL" (ByVal port As Long, ByVal data As Byte) As Long
'--------------------------------------------------------------------------


'----------------------------回调函数及公共变量----------------------------
'void FAR (__stdcall  * Post2User)(
'                unsigned int data)=NULL;                //数据 *256+端口(1~255)//ring=fd,0=tel
Public KHTstate As Integer


Public D_P(0 To 999) As Long
Public pointStart, pointEnd As Long
'请不要在这里 1申请变量;2执行时间过长。
'访问文本框等,这是因为
'vb的组件不都是线程安全的,当多线程访问不是线程安全的组件,那么会
'产生严重错误。
'
'其他语言请自行考虑,如果实时性要求不是很高,可用比较安全的查询方式。

Public Sub Post2User(ByVal data As Long)
    Dim i, j
    i = 10
    j = 100
    'If (pointEnd + 1 = pointStart) Then Exit Sub
    'If (pointEnd = 999 And pointStart = 0) Then Exit Sub '缓冲满
    
    pointEnd = pointEnd + 1
    If (pointEnd >= 1000) Then pointEnd = 0
    
    D_P(pointEnd) = data And &HFFFF
End Sub

'LT_GetCallerID返回指向来电话号码缓冲区的指针,以零结尾。
'用此函数转换为VB能够接受的字符串。
'其他语言请自行考虑。
'话录通只判断来电号码,振铃,拨号号码,摘挂机,而不能判断打出电话。
'打出电话可以通过判断摘挂机状态和拨号号码振铃延时等状态来判断,此程序并没有提供样例。

Public Sub GetNumber_VB(ByVal port As Long, ByRef TEL As String)
    Dim TelAddress As Long
    Dim TelNumber(0 To 256) As Byte
    Dim l As Long
    
    TelAddress = LT_GetCallerID(port)
    
    CopyMemory TelNumber(0), ByVal TelAddress, 40
    
    l = 0
    While (TelNumber(l) <> 0)
        l = l + 1
    Wend
    
    TEL = Left(StrConv(TelNumber, vbUnicode), l)
    
    'Beep
    
End Sub

Public Function GetState() As Long
    GetState = &HFFFF
    
    If (pointStart = pointEnd) Then Exit Function
    If (pointEnd >= 1000) Then pointEnd = 0: pointStart = 0: Exit Function
    
    pointStart = pointStart + 1
    If pointStart >= 1000 Then pointStart = 0
    
    GetState = Module1.D_P(pointStart)
End Function


'功能:摘挂机
'参数:1 port 端口号(64-71USB口);2 flag 1 挂机,0 摘机
'返回值:1 成功;0 失败。
Public Function HookUp_Tel(ByVal port As Long, ByVal flag As Byte) As Long
    

    Dim ct As Long
    
    If flag Then
        ct = 2550
    Else
        ct = 510
    End If
    
    LT_SetChannelNumber port - 64, 16, ct
    
    LT_TelHookOnOff port, flag
    
End Function

'功能:调整“话录通”接收fsk来电效果
'参数: port 端口号(64-71USB口),ap 参数(2,3,4)
'返回值: 成功; 失败。
Public Function SetFsk(ByVal port As Long, ByVal ap As Long) As Boolean
    
    LT_SetChannelNumber port - 64, 15, ap
    
    SetFsk = True
    
End Function

'查询方式:
'If GetLDTState(port) Then
'    If IsHookUp Then
'    End If
'    If IsCallID Then
'    End If
'    If IsRing Then
'    End If
'    If iferror Then
'    End If
'    If IsDtmf(Dtmf) Then
'       MsgBox("DTMF=" & Dtmf)
'    End If
'End If
'
'功能:测试“话录通”状态
'参数: port 端口号(64-71USB口)
'返回值: 成功; 失败。
Public Function GetLDTState(ByVal port As Long) As Boolean

    port = port - 64
    
    GetKHTState port, KHTstate
    
    If KHTstate And &HF Then GetLDTState = True Else GetLDTState = False

End Function

Public Function IsHookUp() As Boolean '摘挂机
    
    IsHookUp = KHTstate And &H1000

End Function

Public Function IsCallID() As Boolean '来电

    IsCallID = KHTstate And &H1

End Function

Public Function IsRing() As Boolean '振铃

    IsRing = KHTstate And &H2

End Function

Public Function IsError() As Boolean '错误

    IsError = KHTstate And &H4

End Function

Public Function IsDtmf(ByRef Dtmf As Integer) As Boolean 'DTMF信号
  
    IsDtmf = KHTstate And &H8
    Dtmf = (KHTstate And &HF0) / 16

End Function

⌨️ 快捷键说明

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