C#退出程序
//关闭本窗口,如果不是主窗口或有托管线程无法完全退出
this.Close();
//终止所有线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.Exit();
//终止当前线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.ExitThread();
//彻底退出,终止此进程并返回代码给操作系统
System.Environment.Exit(0);
//关闭本窗口,如果不是主窗口或有托管线程无法完全退出
this.Close();
//终止所有线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.Exit();
//终止当前线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.ExitThread();
//彻底退出,终止此进程并返回代码给操作系统
System.Environment.Exit(0);
设计的一个项目需要客户端离线使用的同时控制使用时间,如果获取本地时间判断容易被欺骗,用带时钟的加密狗无法提前结束或者追加时长,就想到了以下方法
1、提前在程序中保存:ID、本机密码、验证码接口,其中本机密码是不可让用户知道的。
2、程序运行时随机生成一串数字,将ID与随机数拼接在接口后作为GET参数提交,生成二维码显示。
3、用户扫码打开网页,服务器根据ID判断用户身份,获取对应密码,然后按 md5(ID + 9位数 + 密码)来计算MD5,取前四位显示。
4、用户输入软件,软件按相同方式计算MD5取前四位比对判断是否正确。
编写了一个登录框,需要在用户按回车时进行提交,可以为输入框添加KeyUp事件函数,然后在函数内写
if (e.KeyCode == Keys.Control || e.KeyCode == Keys.Enter)
{
//要执行的代码
}
测试发现如果使用了MessageBox.Show()
,在弹出窗口上按回车确认也会再次触发这个事件,我的解决方法是弹窗前先清空输入框内容,然后在事件函数执行时判断一下输入框是否为空
if (this.InputBox.Text.Count() != 0)
{
if (e.KeyCode == Keys.Control || e.KeyCode == Keys.Enter)
{
//要执行的代码
this.InputBox.Text = String.Empty;
}
}
String inputString = "要处理的字符串";
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.UTF8.GetBytes(inputString);
byte[] md5Data = md5.ComputeHash(data, 0, data.Length);
md5.Clear();
String resule= String.Empty;
for (int i = 0; i < md5Data.Length; i++)
{
resule += System.Convert.ToString(md5Data[i], 16).PadLeft(2, '0');
}
resule= resule.PadLeft(32, '0');
MessageBox.Show(resule);
//获取执行目录
String startPath = System.Windows.Forms.Application.StartupPath;
//获取执行盘符
String startDisk = System.Windows.Forms.Application.StartupPath.Substring(0, 1);
创建一个7-Zip进程解压文件:
System.Diagnostics.Process unZipProcess = new System.Diagnostics.Process();
unZipProcess.StartInfo.FileName = @"C:\7zG.exe"; //执行文件
unZipProcess.StartInfo.Arguments = " x \"压缩文件\" -o\"输出路径\" -aoa"; //执行参数
unZipProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //表示隐藏窗口
unZipProcess.Start(); //开始执行
unZipProcess.WaitForExit(); //等待进程结束
//unZipProcess.WaitForExit(1000); //等待进程结束,设置等待时间最多为1000毫秒
//unZipProcess.Kill(); //强制结束进程
unZipProcess.Close(); //释放资源
执行CMD命令类似,多了几项设置,释义忘了,可以用VS鼠标悬停看说明
System.Diagnostics.Process cmdProcess = new System.Diagnostics.Process();
cmdProcess.StartInfo.FileName = "cmd.exe";
cmdProcess.StartInfo.UseShellExecute = false;
cmdProcess.StartInfo.RedirectStandardInput = true;
cmdProcess.StartInfo.RedirectStandardOutput = true;
cmdProcess.StartInfo.RedirectStandardError = true;
//隐藏窗口执行
cmdProcess.StartInfo.CreateNoWindow = true;
cmdProcess.Start();
//执行命令,在命令后面带上exit可以让cmd执行完成后退出,否则执行`WaitForExit()`且不指定超时时间会假死
cmdProcess.StandardInput.WriteLine("ping 127.0.0.1&exit");
//可以多次调用此方法来执行多条命令,执行完所有命令后再执行exit
//但要注意每次提交完命令要等待一定时间再执行下一个,否则会失败
//cmdProcess.StandardInput.WriteLine("ipconfig /release");
//System.Threading.Thread.Sleep(500);
//cmdProcess.StandardInput.WriteLine("ipconfig /renew");
//System.Threading.Thread.Sleep(500);
//cmdProcess.StandardInput.WriteLine("exit");
cmdProcess.StandardInput.AutoFlush = true;
//获取返回值
String OutputData = cmdProcess.StandardOutput.ReadToEnd();
//等待进程退出,可以指定超时时间
cmdProcess.WaitForExit();
//关闭
cmdProcess.Close();
String stringObject = "Hello";
stringObject.Substring(0, 1);
// 截取字符串第一位
stringObject.Substring(StringObject.Lenght - 1, 1);
// 截取字符串最后一位
最近要做一个文件加密、权限控制方面的软件,查询得知的一个资源管理器的古老bug。
将目录命名为con
、aux
、com1
(1-9均可)、lpt1
(1-9均可)、prn
即可让资源管理器无法删除或操作其中的文件。
创建方法:
1、使用CMD执行mkdir "F:/con//"
进行创建。
2、使用Git的MinGW64之类的命令行的mkdir命令直接创建。
将目录重命名,加上后缀.{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}
即可。
如果要隐藏可使用attrib命令给文件加上隐藏属性和系统文件属性,使用管理员模式CMD执行attrib +h +s 目录/文件名
即可。