http://www.yes-tele.com/modem.html
Modems have their limitations for recording phone line activity. A modem cannot detect outgoing calls (touch tones), determine the length of the call (on/off hook), or detect if the call was answered. If you have a need for more functionality than what a modem has, check out our Identifier
What the Modem can NOT do and the Identifier does.
Outgoing calls (detect touch tones)
Length of Call
On/Off Hook status
Detect if call was answered
Store call data when software or computer is not running
A Modem Caller ID Windows Program
and Visual Basic Project
We do not provide any support for this software!
We provide this free caller id software as a public service and do NOT wish to spend any additional resources to support it.
This software is known to work with 3COM/US Robotics modems. It probably will work with many others as well. Not all modems support Caller ID. Check your modem documentation or contact the manufacturer.
To test your modem using HyperTerminal (which comes with Windows) follow this procedure:
Using HyperTerminal, (Found under Programs, Accessories, HyperTerminal in
Windows 95 or Programs, Accessories, Communications, HyperTerminal in
Windows 98, 2000, & XP), follow these instructions:
1. Open the Hyper Terminal Group (Win95)
2. Double click the Hyperterm.exe icon
3. For name enter CALLER ID
4. Choose OK
5. From the Connect Using drop down box, pick your modem or the "direct to
the Com port X" which your external modem is connected and Click OK
6. Choose OK on the Com Port Settings Screen
7. Enter ATZ followed by the ENTER key You should get an OK (If you do not
receive an OK, check to see that your modem is not in use by another program
and verify that you selected the correct modem/COM Port for your modem.)
8. Then enter AT#CID=1 followed by ENTER key. You should receive an OK. If you
do not receive an OK, try the additional codes in step 9.
9. You may try the following instead of AT#CID=1 in step 8.
AT%CCID=1
AT+VCID=1
AT#CC1
AT*IC1
If all these fail you can check your modem documentation for additional
codes that may work. Your modem may not support caller id.
If one of these additional codes does work you must enter the code
in the software's Setup.
Then place a call to your modem and you should get
caller id data something like this:
RING
RING
DATE = 0331
TIME = 1245
NMBR = 9543447665
NAME = YES TELECOM
If you get something different than DATE TIME NMBR and NAME as labels
please let us know. Our software will currently work with these labels.
FREE Windows 95/98/NT/2000 Software
This program makes a chronological call log of incoming calls. Date of call, time of call, caller id number, and caller id name.
We provide this free caller id software as a public service and do NOT wish to spend additional resources to support it. If it works for you great, if not, sorry we cannot help you.
EXCEPTION: If you are technically oriented (e.g. engineer or programmer) and have a modem that does not behave like we expect as explained above, you may send us an e-mail (
technical@yes-tele.com) and we may try to make our software work with your modem. You must supply an example of your modem's response.
You must have a Caller ID modem (see above), Caller ID service, to make it work.
To Download Click Here: Windows Caller ID Program(modem.exe 560K bytes)
Run this MODEM.EXE, it will create a directory /Program Files/yestelecom and install all necessary files there. To uninstall just delete the yestelecom directory using Explorer.
What the Modem can NOT do and the Identifier does.
Outgoing calls (detect touch tones)
Length of Call
On/Off Hook status
Detect if call was answered
Store call data when software or computer is not running
Visual Basic 6.0
We provide this free caller id software as a public service and do NOT wish to spend any additional resources to support it. If you really need some support try to locate a Visual Basic programmer in your local area.
This is a Visual Basic 6.0 project that displays the caller id data and stores the caller id data in an Access database table.
You must have a Caller ID modem, Caller ID service, and Visual Basic version 6.0 to make it work.
Download VB Caller ID Project - vbmodem.zip
Download VB Modem Software, Click Here:
Visual Basic Caller ID Project (vbmodem.zip 10K bytes)
代碼: 選擇全部
Option Explicit
'Private Variables
Public fo As FileSystemObject
Public db As Database
Public wrk As Workspace
Public rs As Recordset
Public idx As Index
Public m_stDataPath As String
Public bEcho As Boolean 'public echo flag for com
Public bOK As Boolean
Public bRing As Boolean
Public bError As Boolean
Public iRingTime As Single
'Private Constants
Private Const DefDataPath = "C:\"
Private Sub Form_Load()
'retrieve last window location
Me.Top = GetSetting(App.Title, "Window", "Top", Me.Top)
Me.Left = GetSetting(App.Title, "Window", "Left", Me.Left)
'retrieve last port settings
Comm1.Settings = GetSetting(App.Title, "Properties", "Settings", Comm1.Settings)
Comm1.CommPort = GetSetting(App.Title, "Properties", "CommPort", Comm1.CommPort)
Comm1.Handshaking = GetSetting(App.Title, "Properties", "Handshaking", Comm1.Handshaking)
bEcho = GetSetting(App.Title, "Properties", "Echo", False)
m_stDataPath = GetSetting(App.Title, "Properties", "DataPath", DefDataPath)
frmLineInfo.CallName.Text = ""
frmLineInfo.Number.Text = ""
frmLineInfo.DateTime.Text = ""
OpenDataBase
End Sub
Private Sub Connect_Click()
If (Connect.Caption = "&Connect") Then ' This menu item will open or close the com port
On Error GoTo 0
If Not Comm1.PortOpen Then ' Open the comm port if not already open
Comm1.PortOpen = True
End If
If Not Comm1.PortOpen Then ' if there is a problem opening the port
MsgBox "Cannot open comm port " & Comm1.CommPort ' display an error first
End ' bail out of the program
End If
' Initialize communications and update app UI
Comm1.DTREnable = True
Comm1.RTSEnable = True
Comm1.RThreshold = 1 ' Generate a receive event on every character received
Comm1.InputLen = 1 ' Read the receive buffer 1 char at a time
bOK = False
bError = False
Comm1.Output = vbCr + "ATZ" + vbCr ' Reset modem
Wait
If bOK Then
bOK = False
bError = False
Comm1.Output = "AT#CID=1" + vbCr 'Turn on caller id events
Wait
If bError Then
MsgBox "Port " + Comm1.CommPort + ": Modem not Caller ID enabled"
Comm1.PortOpen = False ' Close the port and update app UI
Connect.Caption = "&Connect" ' Change the menu to reflect opposite of port status
ElseIf bOK Then
Connect.Caption = "Dis&connect" ' Change the menu to reflect opposite of port status
End If
Else
MsgBox "Port " + Str(Comm1.CommPort) + " not responding"
Comm1.DTREnable = False
Comm1.RTSEnable = False
Comm1.PortOpen = False ' Close the port and update app UI
Connect.Caption = "&Connect" ' Change the menu to reflect opposite of port status
End If
Else
Comm1.DTREnable = False
Comm1.RTSEnable = False
Comm1.PortOpen = False ' Close the port and update app UI
Connect.Caption = "&Connect" ' Change the menu to reflect opposite of port status
End If
End Sub
Private Sub ProcessEvent(stEvent As String)
Dim stNumber As String
ModemEvents.AddItem stEvent 'Add Modem event to event listbox
Select Case stEvent
Case "OK"
bOK = True
Case "ERROR"
bError = True
Case "RING"
If bRing = False Then
frmLineInfo.DateTime.Text = Now
bRing = True
End If
iRingTime = Timer
Case Else
Select Case Left(stEvent, 4)
Case "TIME"
Case "DATE"
Case "NMBR"
stNumber = Mid(stEvent, 8)
If Len(stNumber) = 10 Then
frmLineInfo.Number.Text = "(" + Left(stNumber, 3) + ") " + Mid(stNumber, 4, 3) + "-" + Right(stNumber, 4)
Else
frmLineInfo.Number.Text = stNumber
End If
Case "NAME"
frmLineInfo.CallName.Text = Mid(stEvent, 8)
End Select
End Select
End Sub
Private Sub ClearEvents_Click()
ModemEvents.Clear
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub comm1_OnComm()
Static stEvent As String 'storage for an Modem event
Dim stComChar As String * 1 'temporary storage for received comm port data
Select Case Comm1.CommEvent
Case comEvReceive ' Received RThreshold # of chars.
Do
stComChar = Comm1.Input 'read 1 character .Inputlen = 1
Select Case stComChar
Case vbLf 'Ignore linefeeds
Case vbCr 'The CR indicates the end of the Receive String
If Len(stEvent) > 0 Then
ProcessEvent stEvent 'Process the Modem event
stEvent = ""
End If
Case Else
stEvent = stEvent + stComChar 'Save everything between CR's
End Select
Loop While Comm1.InBufferCount 'Loop until all characters in receive buffer are processed
'----------------------------------------------------------------------------------------------
'The following communication events are ignored.
'In normal operation they will never fire.
'----------------------------------------------------------------------------------------------
'Case comBreak ' A Break was received.
'Case comCDTO ' CD (RLSD) Timeout.
'Case comCTSTO ' CTS Timeout.
'Case comDSRTO ' DSR Timeout.
'Case comFrame ' Framing Error
'Case comOverrun ' Data Lost.
'Case comRxOver ' Receive buffer overflow.
'Case comRxParity ' Parity Error.
'Case comTxFull ' Transmit buffer full.
'Case comEvCD ' Change in the CD line.
'Case comEvCTS ' Change in the CTS line.
'Case comEvDSR ' Change in the DSR line.
'Case comEvRing ' Change in the Ring Indicator.
'Case comEvSend ' chars in send buffer
'----------------------------------------------------------------------------------------------
End Select
End Sub
Private Sub Wait()
Dim Start
Start = Timer
Do While Timer < Start + 2
DoEvents
If bOK Then
Exit Sub
End If
If bError Then
Exit Sub
End If
Loop
End Sub
Private Sub Exit_Click()
Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Comm1.PortOpen Then
Comm1.PortOpen = False
End If
If (Me.WindowState = vbNormal) Then
SaveSetting App.Title, "Window", "Top", Me.Top
SaveSetting App.Title, "Window", "Left", Me.Left
End If
SaveSetting App.Title, "Properties", "DataPath", m_stDataPath
CloseDatabase
End Sub
Private Sub Properties_Click()
Load frmProperties
frmProperties.Show
End Sub
Private Sub OpenDataBase()
Set fo = New FileSystemObject
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
If Not fo.FileExists(m_stDataPath & "callerid.mdb") Then
Set db = wrk.CreateDatabase(m_stDataPath & "callerid.mdb", dbLangGeneral)
CreatePhoneDB
Else
Set db = wrk.OpenDataBase(m_stDataPath & "callerid.mdb")
End If
Set rs = db.OpenRecordset("PhoneCalls", dbOpenTable)
End Sub
Private Sub CloseDatabase()
db.Close
wrk.Close
Set db = Nothing
Set wrk = Nothing
Set fo = Nothing
End Sub
Private Sub AddRecord()
Dim lID As Long
Select Case Len(frmLineInfo.Number.Text)
Case 0
frmLineInfo.Number.Text = "No Number"
Case 1
Select Case frmLineInfo.Number.Text
Case "O"
frmLineInfo.Number.Text = "Unavailable"
frmLineInfo.CallName.Text = "Unavailable"
Case "P"
frmLineInfo.Number.Text = "Blocked"
frmLineInfo.CallName.Text = "Blocked"
End Select
End Select
Select Case Len(frmLineInfo.CallName.Text)
Case 0
frmLineInfo.CallName.Text = "-"
Case 1
Select Case frmLineInfo.CallName.Text
Case "O"
frmLineInfo.CallName.Text = "Unavailable"
Case "P"
frmLineInfo.CallName.Text = "Blocked"
End Select
End Select
With rs
If (.RecordCount > 0) Then
.MoveLast
lID = .Fields("id") + 1
Else
lID = 1
End If
.AddNew
.Fields("id") = lID
.Fields("datetime") = Now
.Fields("number") = frmLineInfo.Number.Text
.Fields("name") = frmLineInfo.CallName.Text
.Update
End With
End Sub
Private Function CreatePhoneDB() As Recordset
Dim tbl As TableDef
Set tbl = db.CreateTableDef("PhoneCalls")
With tbl
.Fields.Append .CreateField("id", dbLong, 4)
.Fields.Append .CreateField("datetime", dbDate, 4)
.Fields.Append .CreateField("number", dbText, 20)
.Fields.Append .CreateField("name", dbText, 20)
db.TableDefs.Append tbl
End With
Set db = wrk.OpenDataBase(m_stDataPath & "callerid.mdb")
Set tbl = db!phonecalls
Set idx = tbl.CreateIndex("DateTime")
idx.Fields.Append idx.CreateField("datetime")
tbl.Indexes.Append idx
End Function
Private Sub Report_Click()
Load frmReport
frmReport.Show
End Sub
Private Sub Timer1_Timer()
If bRing Then
If Timer < iRingTime Then
iRingTime = Timer
ElseIf Timer > iRingTime + 8 Then
AddRecord
bRing = False
lbCallList.AddItem frmLineInfo.DateTime.Text + " " + frmLineInfo.Number.Text + " " + frmLineInfo.CallName.Text, 0
frmLineInfo.Number.Text = ""
frmLineInfo.CallName.Text = ""
frmLineInfo.DateTime.Text = ""
End If
End If
End Sub