c#窗体应用程序实现软件开机自启,并可以通过路径控制ICT测试软件的打开和关闭。良品条码和不良品条码可以在本地文件夹中的txt文件中获取。当软件开启,定时器就在数据库扫描是否有设置的良品和不良品条码的当天测试记录(数据库ICT_test表中Barcode和Date项的记录),如果存在,lable状态栏变绿并提示“以点检,请进行ICT测试”。就可以通过c#软件开启按钮打开ICT测试软件,进其他条码的ICT测试。如果数据库中没有设置的良品和不良品条码的测试记录,点击开启ICT测试按钮时,label状态栏变红,并提示“请进行测试前点检”,然后就先进行设置条码的ICT测试,判断扫描到的条码是否为txt文件中设置的良品或不良品条码,如输入的条码不符合,label状态栏变红,并提示“条码错误”,如输入的条码正确并为设置的良品条码,label状态栏变绿,并提升“请进行良品点检”,这时就将扫到的良品条码通过模拟键盘复制黏贴到ICT条码栏,进行ICT测试,测试完成后就提示“良品点检完成”,并将测试记录上传到数据库
时间: 2023-11-24 22:05:12 浏览: 168
实现软件开机自启可以通过修改注册表实现。在程序启动时,可以读取一个设置文件,获取ICT测试软件的路径信息。然后,可以通过Process类打开或关闭ICT测试软件。在定时器的Tick事件中,可以使用SQL语句查询数据库中是否有当天需要测试的记录,如果有,就更新状态栏、提示信息和按钮可见性。在开启ICT测试按钮的Click事件中,可以先判断数据库中是否有设置的良品和不良品条码的测试记录,如果没有,就弹出对话框让用户设置。设置完成后,就可以进行ICT测试了。以下是伪代码:
```csharp
private void Form_Load(object sender, EventArgs e)
{
// 设置开机自启
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
rk.SetValue("MyApp", Application.ExecutablePath);
// 读取设置文件
string filePath = "settings.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
string ictExePath = doc.SelectSingleNode("/Settings/ICTExePath").InnerText;
// 定时器扫描数据库
timer1.Interval = 5000; // 5秒钟扫描一次
timer1.Tick += Timer1_Tick;
timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
// 查询数据库是否有当天测试记录
string sqlQuery = "SELECT * FROM ICT_test WHERE Date = @Date AND (Barcode = @GoodBarcode OR Barcode = @BadBarcode)";
DateTime today = DateTime.Today;
using (SqlConnection conn = new SqlConnection("connectionString"))
{
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
cmd.Parameters.AddWithValue("@Date", today);
cmd.Parameters.AddWithValue("@GoodBarcode", "goodBarcode");
cmd.Parameters.AddWithValue("@BadBarcode", "badBarcode");
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
// 更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Green;
labelStatus.Text = "以点检,请进行ICT测试";
btnOpenICT.Visible = true;
}
else
{
// 更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Red;
labelStatus.Text = "请进行测试前点检";
btnOpenICT.Visible = false;
}
}
}
private void btnOpenICT_Click(object sender, EventArgs e)
{
// 查询数据库是否有当天测试记录
string sqlQuery = "SELECT * FROM ICT_test WHERE Date = @Date AND (Barcode = @GoodBarcode OR Barcode = @BadBarcode)";
DateTime today = DateTime.Today;
using (SqlConnection conn = new SqlConnection("connectionString"))
{
SqlCommand cmd = new SqlCommand(sqlQuery, conn);
cmd.Parameters.AddWithValue("@Date", today);
cmd.Parameters.AddWithValue("@GoodBarcode", "goodBarcode");
cmd.Parameters.AddWithValue("@BadBarcode", "badBarcode");
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (!reader.Read())
{
// 弹出对话框让用户设置
SettingForm settingForm = new SettingForm();
DialogResult result = settingForm.ShowDialog();
if (result == DialogResult.OK)
{
// 设置完成后,更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Green;
labelStatus.Text = "请进行良品点检";
btnOpenICT.Visible = false;
btnStartTest.Visible = true;
}
}
else
{
// 直接打开ICT测试软件
Process.Start(ictExePath);
}
}
}
private void btnStartTest_Click(object sender, EventArgs e)
{
// 判断输入的条码是否为设置的良品或不良品条码
string filePath = "barcodes.txt";
List<string> goodBarcodes = new List<string>();
List<string> badBarcodes = new List<string>();
using (StreamReader sr = new StreamReader(filePath))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("Good:"))
{
goodBarcodes.Add(line.Substring(5));
}
else if (line.StartsWith("Bad:"))
{
badBarcodes.Add(line.Substring(4));
}
}
}
if (goodBarcodes.Contains(txtBarcode.Text))
{
// 进行ICT测试
SendKeys.Send("^c"); // 模拟Ctrl+C复制条码
SendKeys.Send("{TAB}"); // 切换到ICT软件的条码栏
SendKeys.Send("^v"); // 模拟Ctrl+V粘贴条码
SendKeys.Send("{ENTER}"); // 模拟回车键
// 更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Green;
labelStatus.Text = "良品点检完成";
btnStartTest.Visible = false;
btnOpenICT.Visible = true;
// 将测试记录上传到数据库
string sqlInsert = "INSERT INTO ICT_test (Barcode, Date, Result) VALUES (@Barcode, @Date, @Result)";
DateTime today = DateTime.Today;
using (SqlConnection conn = new SqlConnection("connectionString"))
{
SqlCommand cmd = new SqlCommand(sqlInsert, conn);
cmd.Parameters.AddWithValue("@Barcode", txtBarcode.Text);
cmd.Parameters.AddWithValue("@Date", today);
cmd.Parameters.AddWithValue("@Result", "Pass");
conn.Open();
cmd.ExecuteNonQuery();
}
}
else if (badBarcodes.Contains(txtBarcode.Text))
{
// 更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Red;
labelStatus.Text = "条码错误";
btnStartTest.Visible = false;
btnOpenICT.Visible = true;
}
else
{
// 更新状态栏、提示信息和按钮可见性
labelStatus.ForeColor = Color.Red;
labelStatus.Text = "条码错误";
}
}
```
阅读全文