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

📄 form1.cs

📁 手機上的監視程式, 可以監督SMS, MMS, 以及電話和Mail
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace MobileTools
{
    
    public delegate void phoneMessageHandler(string message);
    public delegate void signalStrengthHandler(string message);
    public delegate void callerIdHandler(string message);
    public delegate void modeHandler(string message);
    public delegate void batteryStatusHandler(string message);
    public delegate void volumeHandler(string message);

    public partial class Form1 : Form
    {
        SerialPort port;
        public event phoneMessageHandler message;

        private int _mode;

        public Form1()
        {
            InitializeComponent();

            //add the list of port names to select from
            cbPorts.Items.AddRange(SerialPort.GetPortNames());
            
            //event to handle messages recieved from the phone
            message += new phoneMessageHandler(Form1_message);
           
        }

        void Form1_volume(string message)
        {
            //decode caller id
            string[] sep = {","};
            string[] volume = message.Remove(0, 6).Split(sep, StringSplitOptions.None);
            
            //if it is the ringer
            if (volume[0].Trim() == "1")
               volumeLevel.Value = int.Parse(volume[1]); 
        }

        void Form1_battery(string message)
        {
            //decode caller id
            string[] sep = {"," };
            string[] battery = message.Remove(0, 5).Split(sep, StringSplitOptions.None);
            //txtPhoneNumber.Text = caller[0];
            pPowerLevel.Value = int.Parse(battery[1]); 
        }

        void Form1_mode(string message)
        {
            switch (message)
            {
                case "+MODE: 0":
                    lbMode.Text = "Mode: 0";
                    _mode = 0;
                    break;
                case "+MODE: 2":
                    lbMode.Text = "Mode: 2";
                    _mode = 2;
                    break;
                default:
                    lbMode.Text = "Error: Unknown Mode";
                    _mode = -1;
                    break;
            }
        }

        void Form1_callerId(string message)
        {
            //decode caller id
            string[] sep = {","};
            string[] caller = message.Remove(0, 6).Split(sep, StringSplitOptions.None);
            txtPhoneNumber.Text = caller[0].Remove(0,1);
            if (caller.Length > 4)
                txtName.Text = caller[4];
        }

        void Form1_signal(string message)
        {
            //decode signal strength
            switch (message)
            {
                case "+MSSI: 0":
                    signalStrength.Value = 0;
                    MessageBox.Show("No signal found");
                    break;
                case "+MSSI: 1":
                    signalStrength.Value = 1;
                    break;
                case "+MSSI: 25":
                    signalStrength.Value = 2;
                    break;
                case "+MSSI: 56":
                    signalStrength.Value = 3;
                    break;
                case "+MSSI: 75":
                    signalStrength.Value = 4;
                    break;
                case "+MSSI: 90":
                    signalStrength.Value = 5;
                    break;
                default:
                    MessageBox.Show("Signal strenght not recognized: " + message);
                    break;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (cbPorts.SelectedIndex == -1)
            {
                MessageBox.Show("You must select a port first");
                return;
            }
            port = new SerialPort(cbPorts.SelectedItem.ToString());
            port.Open();
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            btnConnect.Enabled = false;
            cbPorts.Enabled = false;
            listBox1.Items.Add("Connection successful.");

            setMode(2);

            //get the signal strength
            setField("AT+MSSI?");
            System.Threading.Thread.Sleep(1000);

            //get the battery level
            setField("AT+CBC");
            System.Threading.Thread.Sleep(1000);

            //get the ring volumne level
            setField("AT+MAVL?");
            System.Threading.Thread.Sleep(1000);

            //set the calling line identification to enabled
            setField("AT+CLIP=1");
            System.Threading.Thread.Sleep(1000);    
        }

        void Form1_message(string message)
        {
            if (message.Length > 0)
            {
                //signal strength
                if (message.StartsWith("+MSSI"))
                {
                    signalStrengthHandler s = new signalStrengthHandler(Form1_signal);
                    this.Invoke(s, new object[] { message });
                    return;
                }

                //Caller ID
                if (message.StartsWith("+CLIP"))
                {
                    callerIdHandler c = new callerIdHandler(Form1_callerId);
                    this.Invoke(c, new object[] { message });
                    return;
                }

                //mode
                if (message.StartsWith("+MODE"))
                {
                    modeHandler m = new modeHandler(Form1_mode);
                    this.Invoke(m, new object[] { message });
                    return;
                }

                //battery status
                if (message.StartsWith("+CBC"))
                {
                    batteryStatusHandler b = new batteryStatusHandler(Form1_battery);
                    this.Invoke(b, new object[] { message });
                    return;
                }

                //volume level
                if (message.StartsWith("+MAVL"))
                {
                    volumeHandler v = new volumeHandler(Form1_volume);
                    this.Invoke(v, new object[] { message });
                    //return;
                }

                //other message from phone
                if (this.listBox1.InvokeRequired)
                {
                    phoneMessageHandler d = new phoneMessageHandler(Form1_message);
                    this.Invoke(d, new object[] { message });
                }
                else
                {
                    listBox1.Items.Add(message);
                    if (message == "RING")
                    {
                        //incoming call
                        //set it to the top most form
                        bntEndCall.Enabled = true;
                        this.WindowState = FormWindowState.Normal;
                        this.TopMost = true;
                        this.TopMost = false;
                    }
                }
            }
        }

        void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //data is received so read it off of the buffer
            readbuffer();
        }

        private void btnSendAT_Click(object sender, EventArgs e)
        {
            //send attention command
            //phone should respond with and OK
            setField("AT");
        }

        private void button2_Click(object sender, EventArgs e)
        {
           //read anything on the buffer
           readbuffer();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //send whatever command is in the text box
            //to the phone
            setField(textBox1.Text);
        }

        private void readbuffer()
        {
            int buffersize = port.BytesToRead;
            StringBuilder line = new StringBuilder();
            int Bval;
            for (int i = 0; i < buffersize; i++)
            {
                //data is received read the message
                Bval = port.ReadByte();
                switch(Bval)
                {
                    case 10: //new line
                        message(line.ToString());
                        line = new StringBuilder();
                        break;
                    case 13: //carriage return - ignore
                        break;
                    default: //build string message
                        line.Append(char.ConvertFromUtf32(Bval));
                        break;
                }
            }
            //send string message for processing.
            message(line.ToString());
        }
        
        private void setField(string value)
        {
            //convert the string data to
            //byte values to send to the phone
            StringBuilder sb = new StringBuilder(value);
            int size = sb.Length;
            byte[] data = new byte[size+1];
            for (int i = 0; i < sb.Length; i++)
            {
                data[i] = (byte)sb[i];
            }
            data[size] = (byte)Convert.ToChar(13);

            //send the data
            if (port.IsOpen)
                port.Write(data, 0, size+1);
            else
            {
                timer1.Enabled = false;
                message("Port not opened");
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }

        private void btnMode2_Click(object sender, EventArgs e)
        {
            //change the mode to 2
            //advanced AT commands
            setMode(2);
        }

        private void setMode(int val)
        {
            if (_mode == val)
                return;
            switch (val)
            {
                case 0:
                   //set the mode to 0
                   setField("AT+MODE=0");
                   break;
                
                case 2:
                    //set the mode to 2
                    setField("AT+MODE=2");
                    break;
                default:
                    MessageBox.Show("Mode: " + val.ToString() + " not recognized.");
                    break;
            }
            System.Threading.Thread.Sleep(1000);
            setField("AT+MODE?");
        }
        
        
        private void btnMode0_Click(object sender, EventArgs e)
        {
            //change the mode to 0
            setMode(0);
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            port.Close();
            message("Closed connection");
            btnConnect.Enabled = true;
            cbPorts.Enabled = true;
        }

        private void Form1_Resize(object sender, EventArgs e)
        {

            //check if the form is being minimize
            //if so minimize to the system tray
            if (FormWindowState.Minimized == WindowState)
                this.Hide();
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            //icon in system tray has been 
            //double clicked
            this.Show();
            WindowState = FormWindowState.Normal;
        }

        private void bntEndCall_Click(object sender, EventArgs e)
        {
            
            //send end call command
            setField("AT+CHUP");
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //request cellular signal strength
            setField("AT+MSSI?");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //answer the call.
            setField("ATA");
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //enable the timer which checks
            //the signal strength every two minutes.
            //timer1.Enabled = true;

            //set the mode to 2
            setMode(2);
            
            //get the signal strength
            setField("AT+MSSI?");
            System.Threading.Thread.Sleep(1000);

            //get the battery level
            setField("AT+CBC");
            System.Threading.Thread.Sleep(1000);

            //get the ring volumne level
            setField("AT+MAVL?");

        }

        private void volumeLevel_Scroll(object sender, EventArgs e)
        {
            setMode(2);
            setField("AT+MAVL=1," + volumeLevel.Value.ToString());
        }

    }
}

⌨️ 快捷键说明

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