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

📄 form1.cs

📁 一个查找免费短信中心的软件
💻 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 + -