diff --git a/QXXWCX/.vs/QXXWCX/FileContentIndex/ca7c067e-1fd4-41c9-bff3-56f82dfb4e18.vsidx b/QXXWCX/.vs/QXXWCX/FileContentIndex/ca7c067e-1fd4-41c9-bff3-56f82dfb4e18.vsidx new file mode 100644 index 0000000..2002174 Binary files /dev/null and b/QXXWCX/.vs/QXXWCX/FileContentIndex/ca7c067e-1fd4-41c9-bff3-56f82dfb4e18.vsidx differ diff --git a/QXXWCX/.vs/QXXWCX/FileContentIndex/read.lock b/QXXWCX/.vs/QXXWCX/FileContentIndex/read.lock new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/.vs/QXXWCX/v17/.suo b/QXXWCX/.vs/QXXWCX/v17/.suo new file mode 100644 index 0000000..d6bf1e5 Binary files /dev/null and b/QXXWCX/.vs/QXXWCX/v17/.suo differ diff --git a/QXXWCX/QXXWCX.sln b/QXXWCX/QXXWCX.sln new file mode 100644 index 0000000..df7abec --- /dev/null +++ b/QXXWCX/QXXWCX.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33110.190 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QXXWCX", "QXXWCX\QXXWCX.csproj", "{8E8909F1-2A3D-4C47-A6C5-E0F6358A667C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8E8909F1-2A3D-4C47-A6C5-E0F6358A667C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E8909F1-2A3D-4C47-A6C5-E0F6358A667C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E8909F1-2A3D-4C47-A6C5-E0F6358A667C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E8909F1-2A3D-4C47-A6C5-E0F6358A667C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C9CFE2F1-9C03-4442-A09B-5CE22E72B6D0} + EndGlobalSection +EndGlobal diff --git a/QXXWCX/QXXWCX/App.config b/QXXWCX/QXXWCX/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/QXXWCX/QXXWCX/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/QXXWCX/QXXWCX/Form1.Designer.cs b/QXXWCX/QXXWCX/Form1.Designer.cs new file mode 100644 index 0000000..61b467b --- /dev/null +++ b/QXXWCX/QXXWCX/Form1.Designer.cs @@ -0,0 +1,139 @@ +namespace QXXWCX +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.btnConnect = new System.Windows.Forms.Button(); + this.btnStatueData = new System.Windows.Forms.Button(); + this.btnPicture = new System.Windows.Forms.Button(); + this.btnRequestPic = new System.Windows.Forms.Button(); + this.btnTurnOff = new System.Windows.Forms.Button(); + this.rtbMessage = new System.Windows.Forms.RichTextBox(); + this.btnClear = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnConnect + // + this.btnConnect.Location = new System.Drawing.Point(42, 25); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(126, 46); + this.btnConnect.TabIndex = 0; + this.btnConnect.Text = "建立连接"; + this.btnConnect.UseVisualStyleBackColor = true; + this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); + // + // btnStatueData + // + this.btnStatueData.Location = new System.Drawing.Point(42, 97); + this.btnStatueData.Name = "btnStatueData"; + this.btnStatueData.Size = new System.Drawing.Size(126, 46); + this.btnStatueData.TabIndex = 1; + this.btnStatueData.Text = "查询状态"; + this.btnStatueData.UseVisualStyleBackColor = true; + this.btnStatueData.Click += new System.EventHandler(this.btnStatueData_Click); + // + // btnPicture + // + this.btnPicture.Location = new System.Drawing.Point(42, 170); + this.btnPicture.Name = "btnPicture"; + this.btnPicture.Size = new System.Drawing.Size(126, 46); + this.btnPicture.TabIndex = 2; + this.btnPicture.Text = "采集图片"; + this.btnPicture.UseVisualStyleBackColor = true; + this.btnPicture.Click += new System.EventHandler(this.btnPicture_Click); + // + // btnRequestPic + // + this.btnRequestPic.Location = new System.Drawing.Point(42, 242); + this.btnRequestPic.Name = "btnRequestPic"; + this.btnRequestPic.Size = new System.Drawing.Size(126, 46); + this.btnRequestPic.TabIndex = 3; + this.btnRequestPic.Text = "查询图片"; + this.btnRequestPic.UseVisualStyleBackColor = true; + this.btnRequestPic.Click += new System.EventHandler(this.btnRequestPic_Click); + // + // btnTurnOff + // + this.btnTurnOff.Location = new System.Drawing.Point(42, 313); + this.btnTurnOff.Name = "btnTurnOff"; + this.btnTurnOff.Size = new System.Drawing.Size(126, 46); + this.btnTurnOff.TabIndex = 4; + this.btnTurnOff.Text = "关机"; + this.btnTurnOff.UseVisualStyleBackColor = true; + this.btnTurnOff.Click += new System.EventHandler(this.btnTurnOff_Click); + // + // rtbMessage + // + this.rtbMessage.Location = new System.Drawing.Point(219, 30); + this.rtbMessage.Name = "rtbMessage"; + this.rtbMessage.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; + this.rtbMessage.Size = new System.Drawing.Size(219, 408); + this.rtbMessage.TabIndex = 5; + this.rtbMessage.Text = ""; + this.rtbMessage.TextChanged += new System.EventHandler(this.rtbMessage_TextChanged); + // + // btnClear + // + this.btnClear.Location = new System.Drawing.Point(42, 382); + this.btnClear.Name = "btnClear"; + this.btnClear.Size = new System.Drawing.Size(126, 46); + this.btnClear.TabIndex = 6; + this.btnClear.Text = "清空"; + this.btnClear.UseVisualStyleBackColor = true; + this.btnClear.Click += new System.EventHandler(this.btnClear_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(456, 450); + this.Controls.Add(this.btnClear); + this.Controls.Add(this.rtbMessage); + this.Controls.Add(this.btnTurnOff); + this.Controls.Add(this.btnRequestPic); + this.Controls.Add(this.btnPicture); + this.Controls.Add(this.btnStatueData); + this.Controls.Add(this.btnConnect); + this.Name = "Form1"; + this.Text = "Form1"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnConnect; + private System.Windows.Forms.Button btnStatueData; + private System.Windows.Forms.Button btnPicture; + private System.Windows.Forms.Button btnRequestPic; + private System.Windows.Forms.Button btnTurnOff; + private System.Windows.Forms.RichTextBox rtbMessage; + private System.Windows.Forms.Button btnClear; + } +} + diff --git a/QXXWCX/QXXWCX/Form1.cs b/QXXWCX/QXXWCX/Form1.cs new file mode 100644 index 0000000..a160954 --- /dev/null +++ b/QXXWCX/QXXWCX/Form1.cs @@ -0,0 +1,592 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace QXXWCX +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + //QXXWCXIP + string _ip = "192.168.1.204"; + //string _ip = "127.0.0.1"; + + //端口号 + int _port = 11010; + + Socket _client_QXXWCX; + + bool canSend = false; + + //数据接收线程 + Thread th_QXXWCX = null; + + Thread th_FIle = null; + + [Obsolete] + private void btnConnect_Click(object sender, EventArgs e) + { + _client_QXXWCX = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + try + { + IPEndPoint point = new IPEndPoint(IPAddress.Parse(_ip), _port); + _client_QXXWCX.Connect(point); + th_QXXWCX = new Thread(ReceiveMessage_MEMS); + th_QXXWCX.IsBackground = true; + th_QXXWCX.Start(); + Console.WriteLine("已连接服务器" + "\r\n"); + CallInvokeUIUpdate("UpdatertbMessage", "已连接服务器!\n"); + } + catch (Exception) + { + Console.WriteLine("服务器没有开启" + "\r\n"); + CallInvokeUIUpdate("UpdatertbMessage", "服务器没有开启!\n"); + } + } + + + public void SendMessage_MEMS(byte[] messageBytes) + { + if (_client_QXXWCX.Connected) + { + try + { + _client_QXXWCX.Send(messageBytes); + CallInvokeUIUpdate("UpdatertbMessage", "发送数据:" + BitConverter.ToString(messageBytes) + "\n"); + } + catch (Exception) + { + Console.WriteLine("发送数据失败!" + "\r\n"); + CallInvokeUIUpdate("UpdatertbMessage", "发送数据失败!\n"); + } + } + else + { + Console.WriteLine("连接断开!" + "\r\n"); + CallInvokeUIUpdate("UpdatertbMessage", "连接断开!\n"); + } + } + + void SendMsgSilent(string msg) + { + void msgSend() { MessageBox.Show(msg, "提示"); } + Thread td_msg = new Thread(msgSend); + td_msg.Start(); + } + + private static bool PasswordEquals(byte[] b1, byte[] b2) + { + if (b1 == null || b2 == null) return false; + for (int i = 0; i < b2.Length; i++) + { + if (b1[i] != b2[i]) + return false; + } + return true; + } + + public void ReceiveMessage_MEMS() + { + byte[] messageBytes = null; + int num = 0; + try + { + while (true) + { + //while (canSend == false) + //{ + messageBytes = new byte[_client_QXXWCX.ReceiveBufferSize]; + num = _client_QXXWCX.Receive(messageBytes); + + byte[] buffer = new byte[num]; + + for (int i = 0; i < num; i++) + { + buffer[i] = messageBytes[i]; + } + + Console.WriteLine(BitConverter.ToString(buffer)); + CallInvokeUIUpdate("UpdatertbMessage", "接收数据:" + BitConverter.ToString(buffer) + "\n"); + + if (canSend == false && buffer[0] == 0x41 && buffer[1] == 0x35 && buffer[2] == 0x42 && buffer[3] == 0x35) + { + ParsingData(buffer); + } + else if (canSend) + { + Console.WriteLine("开始接收图片!"); + CallInvokeUIUpdate("UpdatertbMessage", "开始接收图片!\n"); + + FileStream wrtr; //文件读写类 + byte[] data; + //int rect = _client_QXXWCX.Receive(data, 0, 4, 0); //用来接收图片字节流长度 + //int size = BitConverter.ToInt32(data, 0); //16进制转成int型 + int rect; + int size = picLength; + int dataleft = size - num; + data = new byte[size]; //创建byte组 + + byte[] result = new byte[size - 8]; + //string str; + //string tempStr; + //byte[] finData; + + wrtr = new FileStream(Environment.CurrentDirectory + "\\picturefile\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png", FileMode.Append); //创建新文件"new.jpg" + FileStream wrtrTxt= new FileStream(Environment.CurrentDirectory + "\\picturefile\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", FileMode.Create); + + int bufferLen = 8; + for (int i = 0; i < num-8; i++) + { + result[i] = buffer[bufferLen]; + bufferLen++; + } + + try + { + ////存储 + //str = HexToString(ByteToString(buffer)); + //tempStr = StringToHexString(str, Encoding.ASCII); + //finData = strToToHexByte(tempStr); + //wrtr.Write(finData, 0, finData.Length); //输出文件 + + int total = num; + + CallInvokeUIUpdate("UpdatertbMessage", "total:" + total + "\n"); + CallInvokeUIUpdate("UpdatertbMessage", "size:" + size + "\n"); + while (total < size) //当接收长度小于总长度时继续执行 + { + //if (dataleft > 65536) + //rect = _client_QXXWCX.Receive(data, total, 65536, 0); //接收字节流,receive方法返回int获取已接收字节个数,第一个参数是需要写入的字节组,第二个参数是起始位置,第三个参数是接收字节的长度 + //else + //rect = _client_QXXWCX.Receive(data, total, dataleft, 0); + rect = _client_QXXWCX.Receive(data, 0, dataleft, 0); + + CallInvokeUIUpdate("UpdatertbMessage", "rect:" + rect + "\n"); + + ////存储 + //str = HexToString(ByteToString(data)); + //tempStr = StringToHexString(str, Encoding.ASCII); + //finData = strToToHexByte(tempStr); + //wrtr.Write(finData, 0, finData.Length); //输出文件 + + int dataLength = 0; + for (int i = total-8; i < total + rect-8; i++) + { + result[i] = data[dataLength]; + dataLength++; + } + + total += rect; //已接收个数-下一次从当前个数开始接收 + dataleft -= rect; //剩下的字节长度 + + CallInvokeUIUpdate("UpdatertbMessage", "total:" + total + "\n"); + CallInvokeUIUpdate("UpdatertbMessage", "dataleft:" + dataleft + "\n"); + } + + CallInvokeUIUpdate("UpdatertbMessage", "接收图片结束,开始存储图片!\n"); + + ////十六进制数组转普通字符串 + //str = HexToString(ByteToString(result)); + + ////CallInvokeUIUpdate("UpdatertbMessage", "str.length:" + str.Length+"\n"); + ////CallInvokeUIUpdate("UpdatertbMessage", str + "\n"); + + //tempStr = StringToHexString(str, Encoding.ASCII); + ////CallInvokeUIUpdate("UpdatertbMessage", "111\n"); + + ////普通字符串转byte + //finData = strToToHexByte(tempStr); + + ////CallInvokeUIUpdate("UpdatertbMessage", "finData.length:" + finData.Length+"\n"); + + //wrtr.Write(finData, 0, finData.Length); //输出文件 + //wrtr.Write(new byte[] { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, 0, 8); + wrtr.Write(result, 0, result.Length); + wrtr.Flush(); //强制输出 + wrtr.Close(); //关闭文件流对象 + + CallInvokeUIUpdate("UpdatertbMessage", "图片接收结束!\n"); + } + catch (Exception ex) + { + CallInvokeUIUpdate("UpdatertbMessage", "图片接收出错:"+ex.Message+"\n"); + } + finally + { + canSend = false; + } + + } + //} + + //CallInvokeUIUpdate("UpdatertbMessage", "开始接收图片!\n"); + + //FileStream wrtr; //文件读写类 + //byte[] data; + ////int rect = _client_QXXWCX.Receive(data, 0, 4, 0); //用来接收图片字节流长度 + ////int size = BitConverter.ToInt32(data, 0); //16进制转成int型 + //int rect; + //int size = picLength; + //int dataleft = size; + //data = new byte[size]; //创建byte组 + + ////Directory.CreateDirectory(Environment.CurrentDirectory + "\\picturefile"); + + //wrtr = new FileStream(Environment.CurrentDirectory + "\\picturefile\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png", FileMode.Create); //创建新文件"new.jpg" + + //int total = 0; + //while (total < size) //当接收长度小于总长度时继续执行 + //{ + // rect = _client_QXXWCX.Receive(data, total, dataleft, 0); //接收字节流,receive方法返回int获取已接收字节个数,第一个参数是需要写入的字节组,第二个参数是起始位置,第三个参数是接收字节的长度 + // CallInvokeUIUpdate("UpdatertbMessage", "rect:" + rect + "\n"); + // total += rect; //已接收个数-下一次从当前个数开始接收 + // dataleft -= rect; //剩下的字节长度 + //} + + //string ascData = Encoding.ASCII.GetString(data); // 将整个ASCII类型的数组(byte[])解码为(string) + // //Console.WriteLine(ascData); + //string hexData = HexToString(ascData); + ////Console.WriteLine(hexData); + + //byte[] finData = strToToHexByte(hexData); + ////Console.WriteLine(BitConverter.ToString(finData)); + + //wrtr.Write(finData, 0, finData.Length); //输出文件 + //wrtr.Flush(); //强制输出 + //wrtr.Close(); //关闭文件流对象 + + //canSend = false; + + //Console.WriteLine("文件写入结束"); + //CallInvokeUIUpdate("UpdatertbMessage", "图片接收结束!\n"); + + + } + } + catch (Exception err) + { + Console.WriteLine(err.Message); + SendMsgSilent(err.Message); + } + } + + private void ParsingData(byte[] byteArray) + { + if (byteArray.Length == 32) + { + if (PasswordEquals(new byte[12] { byteArray[0], byteArray[1], byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7], byteArray[8], byteArray[9], byteArray[10], byteArray[11] }, new byte[12] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 })) + { + //float him = float.Parse(HexToString(ByteToString(new byte[8] { byteArray[18], byteArray[19], byteArray[16], byteArray[17], byteArray[14], byteArray[15], byteArray[12], byteArray[13] }))); + //float err = float.Parse(HexToString(ByteToString(new byte[8] { byteArray[26], byteArray[27], byteArray[24], byteArray[25], byteArray[22], byteArray[23], byteArray[20], byteArray[21] }))); + short him = BitConverter.ToInt16(strToToHexByte(Encoding.ASCII.GetString(new byte[4] { byteArray[26], byteArray[27], byteArray[24], byteArray[25] })), 0); + short err = BitConverter.ToInt16(strToToHexByte(Encoding.ASCII.GetString(new byte[4] { byteArray[22], byteArray[23], byteArray[20], byteArray[21] })), 0); + CallInvokeUIUpdate("UpdatertbMessage", "接收到状态数据:\n温度:" + him / 10f + "\n湿度:" + err / 10f + "\n"); + } + + if (PasswordEquals(byteArray, new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 })) + { + //canSend = true; + Console.WriteLine("采集图片成功"); + CallInvokeUIUpdate("UpdatertbMessage", "采集图片成功!\n"); + } + else if (PasswordEquals(new byte[12] { byteArray[0], byteArray[1], byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7], byteArray[8], byteArray[9], byteArray[10], byteArray[11] }, new byte[12] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 })) + { + Console.WriteLine("采集图片失败"); + CallInvokeUIUpdate("UpdatertbMessage", "采集图片失败!\n"); + } + + if (PasswordEquals(new byte[20] { byteArray[0], byteArray[1], byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7], byteArray[8], byteArray[9], byteArray[10], byteArray[11], byteArray[12], byteArray[13], byteArray[14], byteArray[15], byteArray[16], byteArray[17], byteArray[18], byteArray[19] }, + new byte[20] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 })) + { + + + canSend = true; + Console.WriteLine("请求图片成功"); + CallInvokeUIUpdate("UpdatertbMessage", "请求图片成功!\n"); + + picLength = BitConverter.ToInt32(strToToHexByte(Encoding.ASCII.GetString(new byte[8] { byteArray[26], byteArray[27], byteArray[24], byteArray[25], byteArray[22], byteArray[23], byteArray[20], byteArray[21] })), 0); //ASCII的长度 + //picLength = BitConverter.ToInt32(strToToHexByte(Encoding.ASCII.GetString(new byte[8] { byteArray[20], byteArray[21], byteArray[22], byteArray[23], byteArray[24], byteArray[25], byteArray[26], byteArray[27] })), 0); + //Console.WriteLine(picLength); + CallInvokeUIUpdate("UpdatertbMessage", "图片长度:" + picLength + "\n"); + + //th_FIle = new Thread(ReceiveFile); + //th_FIle.IsBackground = true; + //th_FIle.Start(); + + //th_QXXWCX.Suspend(); + } + else if (PasswordEquals(new byte[12] { byteArray[0], byteArray[1], byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7], byteArray[8], byteArray[9], byteArray[10], byteArray[11] }, new byte[12] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 })) + { + canSend = false; + Console.WriteLine("请求图片失败"); + CallInvokeUIUpdate("UpdatertbMessage", "请求图片失败!\n"); + } + + if (PasswordEquals(byteArray, new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 })) + { + Console.WriteLine("请求关机成功"); + CallInvokeUIUpdate("UpdatertbMessage", "请求关机成功!\n"); + } + else if (PasswordEquals(new byte[12] { byteArray[0], byteArray[1], byteArray[2], byteArray[3], byteArray[4], byteArray[5], byteArray[6], byteArray[7], byteArray[8], byteArray[9], byteArray[10], byteArray[11] }, new byte[12] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 })) + { + Console.WriteLine("请求关机失败"); + CallInvokeUIUpdate("UpdatertbMessage", "请求关机失败!\n"); + } + } + } + + int picLength; + + ////[Obsolete] + //private void ReceiveFile() + //{ + // CallInvokeUIUpdate("UpdatertbMessage", "开始接收图片!\n"); + + // FileStream wrtr; //文件读写类 + // byte[] data; + // //int rect = _client_QXXWCX.Receive(data, 0, 4, 0); //用来接收图片字节流长度 + // //int size = BitConverter.ToInt32(data, 0); //16进制转成int型 + // int rect; + // int size = picLength; + // int dataleft = size; + // data = new byte[size]; //创建byte组 + + // Directory.CreateDirectory(Environment.CurrentDirectory + "\\picturefile"); + // CallInvokeUIUpdate("UpdatertbMessage", "图片存储地址:" + Environment.CurrentDirectory + "\n"); + // wrtr = new FileStream(Environment.CurrentDirectory + "\\picturefile\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png", FileMode.Create); //创建新文件"new.jpg" + + // int total = 0; + // while (total < size) //当接收长度小于总长度时继续执行 + // { + // rect = _client_QXXWCX.Receive(data, total, dataleft, 0); //接收字节流,receive方法返回int获取已接收字节个数,第一个参数是需要写入的字节组,第二个参数是起始位置,第三个参数是接收字节的长度 + // total += rect; //已接收个数-下一次从当前个数开始接收 + // dataleft -= rect; //剩下的字节长度 + // } + + // string hexData = Encoding.ASCII.GetString(data); // 将整个ASCII类型的数组(byte[])解码为(string) + // byte[] finData = strToToHexByte(hexData); + + // wrtr.Write(finData, 0, finData.Length); //输出文件 + // wrtr.Flush(); //强制输出 + // wrtr.Close(); //关闭文件流对象 + + // canSend = false; + + // CallInvokeUIUpdate("UpdatertbMessage", "图片接收完成!\n"); + + // th_QXXWCX.Resume(); + // th_FIle.Abort(); + //} + + private void btnStatueData_Click(object sender, EventArgs e) + { + SendMessage_MEMS(new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 }); + } + + private void btnPicture_Click(object sender, EventArgs e) + { + SendMessage_MEMS(new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 }); + } + + private void btnRequestPic_Click(object sender, EventArgs e) + { + //if (canSend == false) + //{ + // Console.WriteLine("未采集图片或采集图片不成功!"); + // CallInvokeUIUpdate("UpdatertbMessage", "未采集图片或采集图片不成功!\n"); + // return; + //} + + + SendMessage_MEMS(new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 }); + } + + private void btnTurnOff_Click(object sender, EventArgs e) + { + SendMessage_MEMS(new byte[32] { 0x41, 0x35, 0x42, 0x35, 0x30, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x46, 0x46, 0x46, 0x46 }); + } + + private void btnClear_Click(object sender, EventArgs e) + { + rtbMessage.Clear(); + } + + private void rtbMessage_TextChanged(object sender, EventArgs e) + { + rtbMessage.SelectionStart = rtbMessage.Text.Length; //Set the current caret position at the end + rtbMessage.ScrollToCaret(); //Now scroll it automatically + } + + + public void CallInvokeUIUpdate(String code, string arg) + { + //创建一个委托,用于封装一个方法,在这里是封装了 控制更新控件 的方法 + Action invokeAction = new Action(CallInvokeUIUpdate); + //判断操作控件的线程是否创建控件的线程 + //调用方调用方位于创建控件所在的线程以外的线程中,如果在其他线程则对控件进行方法调用时必须调用 Invoke 方法 + if (this.InvokeRequired) + { + //与调用线程不同的线程上创建(说明您必须通过 Invoke 方法对控件进行调用) + this.Invoke(invokeAction, code, arg); + } + else + { + //窗体线程,即主线程 + switch (code) + { + case "UpdatertbMessage": + rtbMessage.AppendText(arg); + break; + + default: + break; + } + } + } + + + /// + /// 16进制转普通字符串 + /// + /// + public static string HexToString(string Hexdata) + { + string result = string.Empty; + byte[] arrByte = new byte[Hexdata.Length / 2]; + int index = 0; + for (int i = 0; i < Hexdata.Length; i += 2) + { + arrByte[index++] = Convert.ToByte(Hexdata.Substring(i, 2), 16); + } + result = System.Text.Encoding.UTF8.GetString(arrByte); + return result; + } + + public static string ByteToString(byte[] bytes) + { + string length = BitConverter.ToString(bytes, 0, bytes.Length); + string[] length1 = length.Split('-'); + string length2 = ""; + for (int i = 0; i < length1.Length; i++) + { + length2 += length1[i]; + } + return length2; + } + + + /// + /// 十六进制字符串转16进制字节数组 + /// + private static byte[] strToToHexByte(string hexString) + { + hexString = hexString.Replace(" ", ""); + if ((hexString.Length % 2) != 0) + hexString += " "; + byte[] returnBytes = new byte[hexString.Length / 2]; + for (int i = 0; i < returnBytes.Length; i++) + returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); + return returnBytes; + } + + private static string hexStrToStr(string str) + { + //去除字符串中的空格 + string[] strT = str.Split(' '); + string strA = ""; + foreach (string strB in strT) + { + strA += strB; + } + + char[] chars = strA.ToCharArray(); + string returnstr = ""; + string[] str1 = new string[chars.Length / 2]; + + for (int i = 0; i < chars.Length / 2; i++) + { + string str111 = chars[2 * i].ToString() + chars[2 * i + 1].ToString(); + uint num = uint.Parse(str111, System.Globalization.NumberStyles.AllowHexSpecifier); + char charr = (char)num; + returnstr = returnstr + charr; + } + return returnstr; + } + + + /// + /// 将字符串形式的多位字节信息转换为对应的字节数组 + /// + /// + /// + public static byte[] StringToBytes(string s) + { + string[] str = s.Split(' '); + int n = str.Length; + + byte[] cmdBytes = null; + int p = 0; + + + for (int k = 0; k < n; k++) + { + int sLen = str[k].Length; + int bytesLen = sLen / 2; + int position = 0; + byte[] bytes = new byte[bytesLen]; + for (int i = 0; i < bytesLen; i++) + { + string abyte = str[k].Substring(position, 2); + bytes[i] = Convert.ToByte(abyte, 16); + position += 2; + } + + if (position >= 2) + { + byte[] cmdBytes2 = new byte[p + bytesLen]; + if (cmdBytes != null) + { + Array.Copy(cmdBytes, 0, cmdBytes2, 0, p); + } + Array.Copy(bytes, 0, cmdBytes2, p, bytesLen); + cmdBytes = cmdBytes2; + p += bytesLen; + } + } + + return cmdBytes; + } + + /// + /// 字符串转换为16进制字符 + /// + /// + /// + /// + private string StringToHexString(string s, Encoding encode) + { + byte[] b = encode.GetBytes(s);//按照指定编码将string编程字节数组 + string result = string.Empty; + for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符 + { + result += Convert.ToString(b[i], 16); + } + return result; + } + } +} diff --git a/QXXWCX/QXXWCX/Form1.resx b/QXXWCX/QXXWCX/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/QXXWCX/QXXWCX/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/QXXWCX/QXXWCX/Program.cs b/QXXWCX/QXXWCX/Program.cs new file mode 100644 index 0000000..93617b6 --- /dev/null +++ b/QXXWCX/QXXWCX/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace QXXWCX +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/QXXWCX/QXXWCX/Properties/AssemblyInfo.cs b/QXXWCX/QXXWCX/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..96c07b6 --- /dev/null +++ b/QXXWCX/QXXWCX/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("QXXWCX")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("QXXWCX")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("8e8909f1-2a3d-4c47-a6c5-e0f6358a667c")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/QXXWCX/QXXWCX/Properties/Resources.Designer.cs b/QXXWCX/QXXWCX/Properties/Resources.Designer.cs new file mode 100644 index 0000000..14c9bf4 --- /dev/null +++ b/QXXWCX/QXXWCX/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace QXXWCX.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QXXWCX.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/QXXWCX/QXXWCX/Properties/Resources.resx b/QXXWCX/QXXWCX/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/QXXWCX/QXXWCX/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/QXXWCX/QXXWCX/Properties/Settings.Designer.cs b/QXXWCX/QXXWCX/Properties/Settings.Designer.cs new file mode 100644 index 0000000..5219934 --- /dev/null +++ b/QXXWCX/QXXWCX/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace QXXWCX.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/QXXWCX/QXXWCX/Properties/Settings.settings b/QXXWCX/QXXWCX/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/QXXWCX/QXXWCX/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/QXXWCX/QXXWCX/QXXWCX.csproj b/QXXWCX/QXXWCX/QXXWCX.csproj new file mode 100644 index 0000000..03426f8 --- /dev/null +++ b/QXXWCX/QXXWCX/QXXWCX.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {8E8909F1-2A3D-4C47-A6C5-E0F6358A667C} + WinExe + QXXWCX + QXXWCX + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + \ No newline at end of file diff --git a/QXXWCX/QXXWCX/bin/Debug/20230721163606.png b/QXXWCX/QXXWCX/bin/Debug/20230721163606.png new file mode 100644 index 0000000..197bdf0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/20230721163606.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe new file mode 100644 index 0000000..30bd479 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe differ diff --git a/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe.config b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/QXXWCX/QXXWCX/bin/Debug/QXXWCX.pdb b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.pdb new file mode 100644 index 0000000..0e8da0e Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/QXXWCX.pdb differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410131900.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410131900.png new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132211.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132211.png new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132403.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132403.png new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132724.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410132724.png new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410134400.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410134400.png new file mode 100644 index 0000000..3560ddf --- /dev/null +++ b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410134400.png @@ -0,0 +1 @@ +89504E470D0A1A0A0000000D4948445200000074000000740802000000DBF88170000000097048597300000EC400000EC401952B0E1B0000001174455874536F66747761726500536E6970617374655D17CEDD000010B349444154789CED9D79545BD79DC72F88452C421810FB222136B108B188C58017EC608C6D1C8CB1631BE3D64E1D274D9B49E624D3F6CCD24EE674CE999E994C9B4C667A4E9A3453D776DC60128CB1D9C1EC022424B1EF3B028490D89158E60F791E57120221F4F4448F3E7FDDDFD5D57B3F7D7DFDDEBDF7F7BB17936BEF7C048CA08329D60EFC35631417458CE2A288515C14318A8B22467151C4282E8A18C54511A3B828621417458CE2A288515C143114713FFEF0DDA4D828ACBDD0318622EEB860EAED9C2B3FB872116B4774092E8C9980B50F0000B0BA264D8A8DA292BD4283FC5BDBBAD6A452AC3DD20186D273DBBAFB26A66600008154F22F7EFA23371712D61EE9004311170050C362CB0B5EEEAEEFE45CC5D6199D6040E25637B2913295EC75FB8D0C0C9DD1090624EEEC9CB8A3A71F31C382FC317446271890B800008AB70752363737C3D0139D6040E2FA78B859E1F188297FBF1D6A0C48DC487A306C4E1AC5D521F151E1B0D9C46DC7CA135D6128E2D269019E6E2E88392E986EEBEAC5D01F9D6028E2A69E5498282263DE438D41881BE44761840421E69A545651D784A13FBAC220C47D3D351936F39E97CE2F2C62E58C0EC15EDCF8A8703A2D003105D3C2FCE24AECDCD125D80FD433CE9E82CDBCE7651A7E91E2E541F1F6A0787B126CADADADAC6CACAD6CADADACADAC70389C605A383A31995B583A2D14A1E0B2A6602C6E4E563A3C4868EFEEAF56FF2AB3B1B6628404F9537C28DEEE142F4F33339CBA96642F77B2977B526CD43FFCE6B3FEA1511D3BAD31588ACB0C0F4D3DA1304878FCB448B599BB0B891112C408090CDDFF6A4366DA6BFFF6F997DABB78303013D7DE8E70EB4A3A5C53585EDD3B388C983E1E6E47A3198CD0202F7757751791CA6493D3C2C5C5E585A5A585C5250080AFB72795EC85346084043AD8134562090ABF606F3013F7CEB54B0EF644C4148925F7730B000078BC652233228119114825AB7E6B6979A577706470646C6442303A3EB9E3FAC34FEFDC888BA4236620955CDFC2D5FD0FD0006CC4CD387B2A4A7125E1B3AF1ED26901094C460233C2D454610C235F8AEC1D1CE91D181E1E9FDCF3E242D11C6C5A5A5AE8C4672DC040DC287A70D6F914A5CAB7B2B35C488E70CD9C64BEA9B5BD89CB6FEFEE07FBC195E4049B92F905EDFC3C38FA16D7C3D5F9ED9C2BAAF588B29B5B5B05A5554515B5739279ED6EE1EBE3099BDDFDC3EA5AA28D5E27113853D37B3957ADADAC76FC7469790500606A6292C88CC0E1D40EB376874E0B801FE55D7D83CB2B2BDA5DEAE0E855DC7B3957A98ADD4A4E0BAFE3E3FFFCFD8F3EFCA5787E0100E0604FBC7B2353BB5BC0AF3200404D1347BBEBE804FD3D1672B2D213980CA5CAEEFEA1BCE765BCCE1EB9C9EFEC91E7DD8406F9070750E1909A26D8DB118EC56DA7ED2CAFAC56D5371FCCEB03A1277133D34E2BCD170647C70BCBAA6B157BD6E8840029273019FB1537ED54123CD228AF656D6C6C68E5AF6ED087B8A9271232CFBD86983BCA2A674EB2FD668F6184E517574ECDCC6A78177B3B425A72125C535C55A795BF3A431FE26E6E6DC90BEDDDFD252FEB59AD7C752DA5321952B6B1B6FAE4971FB1F99D55F5CD4DDCB63DEF72FEF471856E5BD3A834E0D53FFA10B7B8AA4E302D5C5F5FEFE81DD8BD259160AB541319468B0CA34D4ECD54D4B14AAB1B56D776CE21237BB9A79D52E8B685E5D507F15927E869B4C0EBECD9535900C0117B3BA4BCB0B8F420AF505E7673215DCF38F7F9AFFFFECA8533B636D6AA5FCC4C7B0D365F54D41842641EFBC5729823C46D718522714169D5BF7EFA85F8FF1FC478BCE5EBA9C9BFFBF8E719674FC103E1D8483A3C9996C9D6BF2FAAD09BCFBB60B8E2CE884400007E57EFCF7EFD490BAF03A9C75B5A649D4FF9F4E39FC74684C96B2E9F53E8B6DF15954B0C234A6458E2527DB6570B87475FADD1CC2F2EFDFBEFBF568A50D81309EFBD991D1AE8F77A6AB287AB33523F3A21D03C96813606242ED5C7137E9E0E8D8DC39FFEA5A0F8B77FF8B35024862B7D3CDD95D680765C6EC70AEC636808347F5FD81C9B9C566AD0C8E63573DB2F9F3B7D2A31CED6C6BABE85EBEDE96662628234A86B6E851F209863A0E24A65B299D91D628B1B1B1BDFE4177D935F4424D892BD3CFEEEC7B7918FD6A4B247DFBFD087A31A63288F059CA929CD6F5BDC39C9BC8DF5CE8B6772965656722E5F806B1E7EF70CF359831286226E424C241E6F89982E4E8EEFBD99BD4BFB9CCBE9F0BE096E477771553D8AFE6985A1889B14138994E503DBD040BF7B37B3766C1C1F157E3A290EAE41A61B06854188EBE9E612124845CCA1B171F9B2CEB1B8E8ECCCF34A8D5D488E3FBCFA3A5CF3F0BB427839CD7030087113A16E0B00686A6D2F287D292FA725275D4D4F853F7D2B3B0B1EB1B575F53E2DA9D283935A6020E2462065996CBDAE99333C3651C37AB52679F1CC49A4FFDEBB9915E44781BFFBA7DC02BDF9B95FB01F8A9D38CA84A35E15754D6B52190020BFB8222622D4C2DC1C0090969C44F1F25893CA182181F077EF3F2930CC07821CEC7B6ECAB1A3B0F9B4A4525E189B9CFAE2412E524FF3F75552B691CD2B2CC37E5D7117301697C908257BB923E6D3E2CAD9B9ED096E0D8BA34EBE4636EFB77FF833EAFE1D0C8C1F0B70B75D5E59F94E65A9F0FE938271C1F49BD72F21D3DCADADAD6F9F9518CEEACC2E60296E7000151E817D5B50B2B2BAAADAACA28EC5EBECA1F95382A894E1F1C906364F9E7367F86029EE99E3DBDDB6BDBBFF4565ADBA96B373E21A1607193FEC82151E6F47B021120844822DD1CED6C6DADACC0C6786C3999B99C90B6666B8D535E9EC9C78764E323A2140F57D8899B8C10154262314311FE53FDFD7D74D4D4D5D498E2E24273767271792A3ABB3932BC9916847908F2E34676171A9676098D3D6C969EBD23A814A1D98899B7D69 \ No newline at end of file diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135137.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135137.png new file mode 100644 index 0000000..3560ddf --- /dev/null +++ b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135137.png @@ -0,0 +1 @@ +89504E470D0A1A0A0000000D4948445200000074000000740802000000DBF88170000000097048597300000EC400000EC401952B0E1B0000001174455874536F66747761726500536E6970617374655D17CEDD000010B349444154789CED9D79545BD79DC72F88452C421810FB222136B108B188C58017EC608C6D1C8CB1631BE3D64E1D274D9B49E624D3F6CCD24EE674CE999E994C9B4C667A4E9A3453D776DC60128CB1D9C1EC022424B1EF3B028490D89158E60F791E57120221F4F4448F3E7FDDDFD5D57B3F7D7DFDDEBDF7F7BB17936BEF7C048CA08329D60EFC35631417458CE2A288515C14318A8B22467151C4282E8A18C54511A3B828621417458CE2A288515C143114713FFEF0DDA4D828ACBDD0318622EEB860EAED9C2B3FB872116B4774092E8C9980B50F0000B0BA264D8A8DA292BD4283FC5BDBBAD6A452AC3DD20186D273DBBAFB26A66600008154F22F7EFA23371712D61EE9004311170050C362CB0B5EEEAEEFE45CC5D6199D6040E25637B2913295EC75FB8D0C0C9DD1090624EEEC9CB8A3A71F31C382FC317446271890B800008AB70752363737C3D0139D6040E2FA78B859E1F188297FBF1D6A0C48DC487A306C4E1AC5D521F151E1B0D9C46DC7CA135D6128E2D269019E6E2E88392E986EEBEAC5D01F9D6028E2A69E5498282263DE438D41881BE44761840421E69A545651D784A13FBAC220C47D3D351936F39E97CE2F2C62E58C0EC15EDCF8A8703A2D003105D3C2FCE24AECDCD125D80FD433CE9E82CDBCE7651A7E91E2E541F1F6A0787B126CADADADAC6CACAD6CADADACADAC70389C605A383A31995B583A2D14A1E0B2A6602C6E4E563A3C4868EFEEAF56FF2AB3B1B6628404F9537C28DEEE142F4F33339CBA96642F77B2977B526CD43FFCE6B3FEA1511D3BAD31588ACB0C0F4D3DA1304878FCB448B599BB0B891112C408090CDDFF6A4366DA6BFFF6F997DABB78303013D7DE8E70EB4A3A5C53585EDD3B388C983E1E6E47A3198CD0202F7757751791CA6493D3C2C5C5E585A5A585C5250080AFB72795EC85346084043AD8134562090ABF606F3013F7CEB54B0EF644C4148925F7730B000078BC652233228119114825AB7E6B6979A577706470646C6442303A3EB9E3FAC34FEFDC888BA4236620955CDFC2D5FD0FD0006CC4CD387B2A4A7125E1B3AF1ED26901094C460233C2D454610C235F8AEC1D1CE91D181E1E9FDCF3E242D11C6C5A5A5AE8C4672DC040DC287A70D6F914A5CAB7B2B35C488E70CD9C64BEA9B5BD89CB6FEFEE07FBC195E4049B92F905EDFC3C38FA16D7C3D5F9ED9C2BAAF588B29B5B5B05A5554515B5739279ED6EE1EBE3099BDDFDC3EA5AA28D5E27113853D37B3957ADADAC76FC7469790500606A6292C88CC0E1D40EB376874E0B801FE55D7D83CB2B2BDA5DEAE0E855DC7B3957A98ADD4A4E0BAFE3E3FFFCFD8F3EFCA5787E0100E0604FBC7B2353BB5BC0AF3200404D1347BBEBE804FD3D1672B2D213980CA5CAEEFEA1BCE765BCCE1EB9C9EFEC91E7DD8406F9070750E1909A26D8DB118EC56DA7ED2CAFAC56D5371FCCEB03A1277133D34E2BCD170647C70BCBAA6B157BD6E8840029273019FB1537ED54123CD228AF656D6C6C68E5AF6ED087B8A9271232CFBD86983BCA2A674EB2FD668F6184E517574ECDCC6A78177B3B425A72125C535C55A795BF3A431FE26E6E6DC90BEDDDFD252FEB59AD7C752DA5321952B6B1B6FAE4971FB1F99D55F5CD4DDCB63DEF72FEF471856E5BD3A834E0D53FFA10B7B8AA4E302D5C5F5FEFE81DD8BD259160AB541319468B0CA34D4ECD54D4B14AAB1B56D776CE21237BB9A79D52E8B685E5D507F15927E869B4C0EBECD9535900C0117B3BA4BCB0B8F420AF505E7673215DCF38F7F9AFFFFECA8533B636D6AA5FCC4C7B0D365F54D41842641EFBC5729823C46D718522714169D5BF7EFA85F8FF1FC478BCE5EBA9C9BFFBF8E719674FC103E1D8483A3C9996C9D6BF2FAAD09BCFBB60B8E2CE884400007E57EFCF7EFD490BAF03A9C75B5A649D4FF9F4E39FC74684C96B2E9F53E8B6DF15954B0C234A6458E2527DB6570B87475FADD1CC2F2EFDFBEFBF568A50D81309EFBD991D1AE8F77A6AB287AB33523F3A21D03C96813606242ED5C7137E9E0E8D8DC39FFEA5A0F8B77FF8B35024862B7D3CDD95D680765C6EC70AEC636808347F5FD81C9B9C566AD0C8E63573DB2F9F3B7D2A31CED6C6BABE85EBEDE96662628234A86B6E851F209863A0E24A65B299D91D628B1B1B1BDFE4177D935F4424D892BD3CFEEEC7B7918FD6A4B247DFBFD087A31A63288F059CA929CD6F5BDC39C9BC8DF5CE8B6772965656722E5F806B1E7EF70CF359831286226E424C241E6F89982E4E8EEFBD99BD4BFB9CCBE9F0BE096E477771553D8AFE6985A1889B14138994E503DBD040BF7B37B3766C1C1F157E3A290EAE41A61B06854188EBE9E612124845CCA1B171F9B2CEB1B8E8ECCCF34A8D5D488E3FBCFA3A5CF3F0BB427839CD7030087113A16E0B00686A6D2F287D292FA725275D4D4F853F7D2B3B0B1EB1B575F53E2DA9D283935A6020E2462065996CBDAE99333C3651C37AB52679F1CC49A4FFDEBB9915E44781BFFBA7DC02BDF9B95FB01F8A9D38CA84A35E15754D6B52190020BFB8222622D4C2DC1C0090969C44F1F25893CA182181F077EF3F2930CC07821CEC7B6ECAB1A3B0F9B4A4525E189B9CFAE2412E524FF3F75552B691CD2B2CC37E5D7117301697C908257BB923E6D3E2CAD9B9ED096E0D8BA34EBE4636EFB77FF833EAFE1D0C8C1F0B70B75D5E59F94E65A9F0FE938271C1F49BD72F21D3DCADADAD6F9F9518CEEACC2E60296E7000151E817D5B50B2B2BAAADAACA28EC5EBECA1F95382A894E1F1C906364F9E7367F86029EE99E3DBDDB6BDBBFF4565ADBA96B373E21A1607193FEC82151E6F47B021120844822DD1CED6C6DADACC0C6786C3999B99C90B6666B8D535E9EC9C78764E323A2140F57D8899B8C10154262314311FE53FDFD7D74D4D4D5D498E2E24273767271792A3ABB3932BC9916847908F2E34676171A9676098D3D6C969EBD23A814A1D98899B7D69 \ No newline at end of file diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135649.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135649.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410135649.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144556.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144556.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144556.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144740.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144740.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410144740.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410150511.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410150511.png new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410150630.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410150630.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410150630.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151041.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151041.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151041.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151403.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151403.png new file mode 100644 index 0000000..4a99ab0 Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410151403.png differ diff --git a/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410153428.png b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410153428.png new file mode 100644 index 0000000..6651b6e Binary files /dev/null and b/QXXWCX/QXXWCX/bin/Debug/picturefile/20230410153428.png differ diff --git a/QXXWCX/QXXWCX/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/QXXWCX/QXXWCX/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/QXXWCX/QXXWCX/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..e201c85 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..b328c88 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Form1.resources b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Form1.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Form1.resources differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Properties.Resources.resources b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Properties.Resources.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.Properties.Resources.resources differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.AssemblyReference.cache b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.AssemblyReference.cache new file mode 100644 index 0000000..f5b140e Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.AssemblyReference.cache differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.CoreCompileInputs.cache b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..4a5524a --- /dev/null +++ b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8069502011d0681850e57a53d5a1673222f430a6 diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.FileListAbsolute.txt b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..6a25e91 --- /dev/null +++ b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\bin\Debug\QXXWCX.exe.config +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\bin\Debug\QXXWCX.exe +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\bin\Debug\QXXWCX.pdb +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.csproj.AssemblyReference.cache +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.csproj.SuggestedBindingRedirects.cache +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.Form1.resources +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.Properties.Resources.resources +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.csproj.GenerateResource.cache +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.csproj.CoreCompileInputs.cache +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.exe +F:\Code\huaxueshiyanshi\QXXWCX\QXXWCX\obj\Debug\QXXWCX.pdb diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.GenerateResource.cache b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.GenerateResource.cache new file mode 100644 index 0000000..02007f9 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.GenerateResource.cache differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.SuggestedBindingRedirects.cache b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.csproj.SuggestedBindingRedirects.cache new file mode 100644 index 0000000..e69de29 diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.exe b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.exe new file mode 100644 index 0000000..30bd479 Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.exe differ diff --git a/QXXWCX/QXXWCX/obj/Debug/QXXWCX.pdb b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.pdb new file mode 100644 index 0000000..0e8da0e Binary files /dev/null and b/QXXWCX/QXXWCX/obj/Debug/QXXWCX.pdb differ diff --git a/QXXWCX/QXXWCX/obj/Debug/_IsIncrementalBuild b/QXXWCX/QXXWCX/obj/Debug/_IsIncrementalBuild new file mode 100644 index 0000000..e5f828c --- /dev/null +++ b/QXXWCX/QXXWCX/obj/Debug/_IsIncrementalBuild @@ -0,0 +1 @@ +obj\Debug\\_IsIncrementalBuild diff --git a/QXXWCX/logo.png b/QXXWCX/logo.png new file mode 100644 index 0000000..6651b6e Binary files /dev/null and b/QXXWCX/logo.png differ