📄 form1.cs
字号:
using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Runtime.InteropServices;
using System.Media;
namespace 短信
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private int sum=0, check=0; //任务进度
private SerialPort My_com; //串口号
private string My_return; //串口返回文本保存区
private Thread start = null; //搜索线程
private StreamWriter filelog = null; //日志保存文件
[DllImport("user32")]
private static extern int MessageBeep(uint wType); //声音提示函数
private void My_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
My_return += My_com.ReadExisting();
} //向串口读取字符
private string GetCsca()
{
string 号码 = null; //清空文本
My_com.Write("AT+CSCA?\r"); //取中心号码
Thread.Sleep(200);
if (My_return != null&&My_return .IndexOf ("OK")!=-1)
{
号码 = My_return.Substring(20, 13); //固定位置文本
My_return = null; //清空文本
log("成功连接设备!");
}
else
{
My_return = null;
MessageBox.Show("获取短信中心号码失败,请重试。", "设备错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
button2_Click(button2, null); //断开设备
}
return 号码;
} //获取短信中心号码
private string GetpduData(string 短信中心, string 内容, string 手机号码)
{
string pud = "0891",ls1=null ,ls2=null ;
短信中心 += "F"; //补足14位
手机号码 += "F"; //补足14位
for (int i = 0; i < 短信中心.Length;i += 2)
{
pud += 短信中心.Substring(i+1, 1);
pud += 短信中心.Substring(i, 1);
} //短信中心号码转换
pud += "11000D91"; //固定值
for (int i = 0; i < 手机号码.Length; i += 2)
{
pud += 手机号码.Substring(i + 1, 1);
pud += 手机号码.Substring(i, 1);
} //手机号码转换
pud += "000800"; //固定值
pud += (内容.Length*2).ToString ("X2"); //文本长度!
Byte[] unicode = Encoding.Unicode.GetBytes(内容);
for (int i = 0; i < unicode.Length; i += 2)
{
ls1 = unicode[i].ToString("X2");
ls2 = unicode[i + 1].ToString("X2");
pud = pud + ls2 + ls1;
} //文本转换位UNICODE码
return pud;
} //获取PUD码,成功返回非空文本
private bool Send(string 短信中心, string 内容, string 手机号码)
{
内容=内容.Replace("%d", 短信中心);
string PUD = GetpduData(短信中心, 内容, 手机号码);
byte i = 0;
My_com.Write("at+cmgf=0\r");
Thread.Sleep(200);
My_com.Write(string.Format("at+cmgs={0}\r", PUD.Length / 2 - 9));
Thread.Sleep(200);
My_return = "";
My_com.Write(string.Format("{0}\x01a",PUD));
while (!(i>=40 || My_return.IndexOf("OK") != -1 || My_return.IndexOf("ER") != -1))
{
Thread.Sleep(250);
i++;
}
return My_return.IndexOf ("OK")!=-1; //返回OK发送成功 !
} //发送短信,成功返回true
private void log(string log)
{
textBox5.AppendText(DateTime.Now.ToString ()+" "+log + Environment.NewLine);
} //写入日志
private void Form1_Load(object sender, EventArgs e)
{
if (DateTime.Today.Year == 2006)
{
string[] com = SerialPort.GetPortNames();
string item = null;
foreach (string a in com) comboBox1.Items.Add(a);
comboBox1.SelectedIndex = 0; //串口
comboBox2.SelectedIndex = 0; //比特率
comboBox3.SelectedIndex = 0; //位
StreamReader file = new StreamReader("list.txt");
while ((item=file .ReadLine ())!=null)
{
ListViewItem add = new ListViewItem(item.Split(','));
listView1.Items.Add(add);
}
file.Close(); //载入搜索列表
StreamReader config = new StreamReader("config.txt");
sum = Convert.ToInt32(config.ReadLine());
check = Convert.ToInt32(config.ReadLine());
textBox4.Text = config.ReadLine();
config.Close(); //载入搜索进度,手机号码
}
else Application.Exit();
} //打开程序,载入列表和任务位置
private void button1_Click(object sender, EventArgs e)
{
try
{
My_com = new SerialPort(comboBox1.GetItemText(comboBox1.SelectedItem), Convert.ToInt32(comboBox2.GetItemText(comboBox2.SelectedItem)), Parity.None, Convert.ToInt32(comboBox2.GetItemText(comboBox3.SelectedItem)), StopBits.One);
My_com.DtrEnable = true;
My_com.RtsEnable = true;
My_com.DataReceived += new SerialDataReceivedEventHandler(My_DataReceived);
My_com.Open();
}
catch (Exception a)
{
MessageBox.Show(a.ToString(), "错误:");
}
button1.Enabled = false;
button2.Enabled = true;
button3.Enabled = true;
comboBox1.Enabled = false;
comboBox2.Enabled = false;
comboBox3.Enabled = false;
this.Text = comboBox1.GetItemText(comboBox1.SelectedItem) + "设备连接成功,正在获取短信中心号码...";
textBox6.Text = GetCsca();
} //连接串口
private void button2_Click(object sender, EventArgs e)
{
My_com.Close();
button1.Enabled = true;
button2.Enabled = false;
button3.Enabled = false;
comboBox1.Enabled = true;
comboBox2.Enabled = true;
comboBox3.Enabled = true;
this.Text = "串口关闭!";
log("断开设备!");
} //关闭串口
private void button3_Click(object sender, EventArgs e)
{
if (textBox4.Text.IndexOf(',') == -1)
{
if (Send(textBox6.Text, textBox3.Text, textBox4.Text))
log("发送成功!");
else
log("发送失败!");
My_return = null;
}
else MessageBox.Show("手动发送短信,接收号码只能一个!","发送失败:" ,MessageBoxButtons.OK, MessageBoxIcon.Error);
} //发送短信
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
contextMenuStrip1.Show(listView1,e.X ,e .Y );
} //弹出菜单
private void button4_Click(object sender, EventArgs e)
{
string[] str={textBox1 .Text ,textBox2 .Text};
ListViewItem items=new ListViewItem (str);
listView1.Items.Add(items);
} //添加搜索任务
private void button6_Click(object sender, EventArgs e)
{
Application.Exit();
} //退出程序
private void dToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1 .ShowDialog ();
if (openFileDialog1.FileName.EndsWith(".txt"))
{
string item=null;
string[] items=null;
ListViewItem add = null;
StreamReader file = new StreamReader(openFileDialog1.FileName);
while ((item = file.ReadLine()) != null)
{
items = item.Split(',');
add = new ListViewItem(items);
listView1.Items.Add(add);
}
file.Close();
}
else MessageBox.Show("文件错误!", "打开文件错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
} //文件导入任务
private void dToolStripMenuItem1_Click(object sender, EventArgs e)
{
ListView.SelectedListViewItemCollection select = listView1.SelectedItems;
foreach (ListViewItem a in select)
{
listView1.Items.Remove(a);
}
} //删除任务
private void button5_Click(object sender, EventArgs e)
{
if (listView1.Items.Count > 0 &&My_com !=null &&My_com .IsOpen ==true)
{
if (start == null) //是否存在start,不存在就创建
{
start = new Thread(My_thread);
}
if (button5.Text == "开始(继续)搜索")
{
button3.Enabled = false;
button4.Enabled = false;
listView1.Enabled = false;
button5.Text = "停止搜索";
if (filelog == null)
{
filelog= new StreamWriter("ok.txt", true, Encoding.Default);
filelog.AutoFlush = true;
}
if (start.ThreadState == ThreadState.Suspended)
start.Resume();
else start.Start();
}
else
{
button3.Enabled = true;
button4.Enabled = true;
listView1.Enabled = true;
button5.Text = "开始(继续)搜索";
start.Suspend();
}
}
else MessageBox.Show("你没设置搜索段或端口没连接!", "错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
} //开始搜索
private void My_thread()
{
int n = 0;
string csca = null;
string[] str = null;
string[] NO = null;
CheckForIllegalCrossThreadCalls = false;
NO = textBox4.Text.Split(',');
for (/*sum在load事件中已经确定*/;sum <= listView1.Items.Count - 1; sum++)
{
csca = listView1.Items[sum].SubItems[0].Text; //短信中心号码头
str = listView1.Items[sum].SubItems[1].Text.Split('~'); //分割任务
n = Convert.ToInt32(str[1]); //结束号码
for (check = check == 0?Convert.ToInt32(str[0]):check; check <= n; check++)
{
foreach (string no_1 in NO)
{
if (Send(csca + check.ToString(), textBox3.Text, no_1))
{
listBox1.Items.Add(string.Format("{0}--{1}--{2}", csca + check.ToString(),no_1,DateTime.Now.ToString())); //将号码显示到列表
filelog.WriteLine(string.Format("{0}--{1}--{2}", csca + check.ToString(),no_1,DateTime.Now.ToString())); //将号码写到文件
if (checkBox3.Checked) log(string.Format("{0} {1} 发送成功!!", csca + check.ToString(), no_1)); //是否写到日志
if (checkBox1.Checked) MessageBeep(0x30); //是否声音提示
}
else if (checkBox3.Checked) log(String.Format("{0} {1} 发送失败!!", csca + check.ToString(), no_1));
}
}
check = 0;
}
button3.Enabled = true;
button4.Enabled = true;
listView1.Enabled = true;
button5.Text = "开始(继续)搜索";
MessageBox.Show("搜索完毕!!", "完成:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
} //搜索线程
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (start !=null && start.ThreadState ==ThreadState.Suspended)
{
start.Resume();
start.Abort();
}
if (start != null && start.ThreadState == ThreadState.WaitSleepJoin)
{
start.Abort();
}
StreamWriter file = new StreamWriter("list.txt", false, Encoding.Default);
foreach (ListViewItem a in listView1 .Items)
{
file.WriteLine(string.Format("{0},{1}", a.SubItems[0].Text, a.SubItems[1].Text));
}
file.Close(); //保存搜索列表
StreamWriter config = new StreamWriter("config.txt", false, Encoding.Default);
config.WriteLine(sum.ToString());
config.WriteLine(check.ToString());
config.WriteLine(textBox4.Text);
config.Close(); //保存搜索进度
} //关闭程序,保存进度,手机号码,搜索列表
private void textBox5_DoubleClick(object sender, EventArgs e)
{
if (MessageBox.Show("是否清空?", "信息:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
textBox5.Text = "";
} //清空日志
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -