Nguyên văn bởi bxngoc
Nguyên văn bởi bxngoc
Bác còn định quay hình trộm nữa Hi hi lãng mạn lắm đó.
IP-Cam thì sao.
Nguyên văn bởi bxngoc
Public Declare Function Inp Lib "inpout32.dll" _ Alias "Inp32" (ByVal PortAddress As Integer) As Integer Public Declare Sub Out Lib "inpout32.dll" _ Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Option Explicit Private WithEvents puISink As SMS3ASuiteLib.SMS_SuiteAdapter Public puSMSSuiteAdapter As SMS3ASuiteLib.SMS_SuiteAdapter
Private Sub Form_Load() ' Khởi tạo đối tượng Set puSMSSuiteAdapter = New SMS3ASuiteLib.SMS_SuiteAdapter ' Gán puISink = puSMSSuiteAdapter để puISink fire các events Set puISink = puSMSSuiteAdapter ' Bắt đầu listen các event SMS từ mobile Call puSMSSuiteAdapter.StartListeningEvents End Sub
Private Sub Form_Unload(Cancel As Integer) ' Kết thúc làm việc với mobile Call puSMSSuiteAdapter.Terminate ' Giải phóng đối tượng Set puISink = Nothing Set puSMSSuiteAdapter = Nothing End Sub
' Thay bằng số mobile thực của bạn Const MY_OWN_NUMBER = "091899999" Const DATA_PORT = &H378 Const STATUS_PORT = &H379 Const CONTROL_PORT = &H37A
' Hàm này trả về số nào bé hơn trong x và y Function Min(x As Integer, y As Integer) As Integer If x < y Then Min = x Else Min = y End If End Function ' Hàm này tính lũy thừa Private Function pow(i As Integer, j As Integer) As Long Dim index As Integer pow = 1 'pow already set to 1. If j = 0 Then Exit Function If j > 0 Then For index = j To 1 Step -1 pow = pow * i Next Else j = Abs(j) For index = j To 1 Step -1 pow = pow * i Next pow = 1 / pow End If End Function ' Thủ tục này để display message ra txtMessage. Private Sub DisplayMessage(sMsg As String) txtMessage.Text = txtMessage.Text & vbCr & vbLf & sMsg End Sub
Private Sub puISink_ShortMsgReceived(ByVal SMSMemory As SMS3ASuiteLib.SMS_MEMORY_LOCATION, _ ByVal index As Long, ByVal pSMS As SMS3ASuiteLib.IShortMessage) Dim sMsg As String Dim sSender As String Dim reg As Integer Dim sCommand As String Dim c As String Dim i As Integer Dim nMsgLen As Integer ' Mảng giữ trạng thái của 8 thiết bị Dim pin(1 To 8) As Integer ' SMS gởi từ số máy sSender = pSMS.OtherEndAddress ' Nội dung sMsg = pSMS.UserDataText ' Hiển thị số mobile gởi SMS và nội dung ra txtMessage DisplayMessage "SMS received from: " & sSender DisplayMessage "Content: " & sMsg ' Nếu số mobile gởi SMS đến không phải là số của chúng ta --> Spam If sSender <> MY_OWN_NUMBER Then DisplayMessage "Invalid sender" Exit Sub End If ' Kiểm tra lệnh bằng cách lấy 3 ký tự đầu sCommand = UCase$(Left$(sMsg, 3)) If (sCommand = "QRY") Or (sCommand = "SET") Then ' Do thanh ghi (register) DATA của LPT mặc định ở chế độ out, nên để in ta phải enable bit thứ 5 của thanh ghi CONTROL ' Trước tiên đọc thanh ghi CONTROL vào biến reg. Hàm Inp được định nghĩa trong module modPublic ở trên reg = Inp(CONTROL_PORT) ' Sau đó bật bit thứ 5 lên bằng cách OR biến reg với 32 (=2^5) reg = reg Or 32 ' Ghi lai CONTROL bằng hàm Out đã định nghĩa trong modPublic Out CONTROL_PORT, reg ' Bây giờ đọc thanh ghi DATA vào reg = Inp(DATA_PORT) ' Kiểm tra trạng thái của từng thiết bị bằng cách kiểm tra bit For i = 1 To 8 pin(i) = reg And pow(2, i - 1) Next i ' Nếu là lệnh query tình trạng thiết bị If sCommand = "QRY" Then ' Kiểm tra bit 0 để biết trạng thái của thiết bị DEN1 sMgs = "DEN1: " sMsg = sMsg & IIf((pin(1)) = 0, "OFF", "ON") ' Kiểm tra bit 1 để biết trạng thái của thiết bị DEN2 sMsg = sMsg & vbCr & "DEN2: " sMsg = sMsg & IIf((pin(2)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "DEN3: " sMsg = sMsg & IIf((pin(3)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "DEN4: " sMsg = sMsg & IIf((pin(4)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "MAYLANH: " sMsg = sMsg & IIf((pin(5)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "TIVI: " sMsg = sMsg & IIf((pin(6)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "QUAT1: " sMsg = sMsg & IIf((pin(7)) = 0, "OFF", "ON") ' Tiếp tục kiểm tra sMsg = sMsg & vbCr & "QUAT2: " sMsg = sMsg & IIf((pin(8)) = 0, "OFF", "ON") ' Hiển thị ra txtMessage xem có đúng không? DisplayMessage sMsg ' Bây giờ sẽ gởi tình trạng thiết bị bằng SMS ngược lại cho chúng ta bằng hàm SendSMS sẽ viết sau SendSMS MY_OWN_NUMBER, pSMS.SCAddress, sMsg Else ' Lệnh điều khiển thiết bị ' Tìm khoảng trắng cách giữa lệnh SET và tham số i = InStr(1, sMsg, " ") ' Chiều dài toàn bộ chuỗi lệnh nMsgLen = Len(sMsg) ' Nếu thấy khoảng trắng và nằm ở vị trí nhỏ hơn chiều dài chuỗi If (i > 0) And (i < nMsgLen) Then ' Bỏ đi chuỗi SET và khoảng trắng để lấy chuỗi tham số còn lại sMsg = Mid$(sMsg, i + 1, nMsgLen - i) For i = 1 To Min(nMsgLen, 8) ' Lấy ký tự điều khiển của thiết bị (0: Tắt, 1: Mở, *: Bỏ qua) c = Mid$(sMsg, i, 1) If c = "1" Then pin(i) = 1 ElseIf c = "0" Then pin(i) = 0 End If Next i ' Tính giá trị của thanh ghi bằng cách bật các bit tương ứng với thiết bị reg = 0 For i = 1 To 8 If pin(i) = 1 Then reg = reg Or pow(2, i - 1) End If Next i ' Xuất lệnh điều khiển ra LPT Out DATA_PORT, reg Else ' Tham số không hợp lệ DisplayMessage "Invalid paramter" End If End If Else ' Lệnh không hợp lệ (không phải là QRY hoặc SET) DisplayMessage "Invalid command" End If End Sub
Private Sub SendSMS(recipient As String, SMSCAddress As String, msg As String) On Error GoTo ErrorTrap Dim cIShortMessage As SMS3ASuiteLib.ShortMessage Set cIShortMessage = puSMSSuiteAdapter.CreateShortMsg 'message cIShortMessage.UserDataText = msg 'destination cIShortMessage.OtherEndAddress = recipient 'SMSCAddress cIShortMessage.SCAddress = SMSCAddress 'send SMS Call puSMSSuiteAdapter.Send(cIShortMessage) Exit Sub ErrorTrap: Dim AdapterError As NmpAdapterError AdapterError = puSMSSuiteAdapter.GetLastError DisplayMessage "Error number " & AdapterError & " in SMS sending" End Sub
Comment