WinForm应用程序的开机自启、记住密码,自动登录的实现
一、思路:
1.开机自启,自然是需要用到注册表,我们需要把程序添加到电脑的注册表中去
2.记住密码,自动登录,开机自启,在页面的呈现我们都使用复选框按钮来呈现
3.数据持久化,不能是数据库,可以是sqlite或txt、json文件。
二、数据持久化
1.这里我使用的是json文件,appsettings.json如下:
{
"IsAutoBoot": false,//开机自启
"TopMost": true,//是否永远置顶窗口
"IsAutoLogin":false,//是否自动登录
"IsRememberPwd":false,//是否记住密码
"AccountNumber": "",
"PassWord": "",
}
2.读取和写入json数据
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace YXChatFormClient.Utility
{
public class JSONHelper
{
/// <summary>
/// 读取JSON文件
/// </summary>
public static T ReadJSON<T>(string key)
{
try
{
string path = Application.StartupPath + @"\appsettings.json";
StreamReader streamReader = new StreamReader(path);
dynamic jsonObj = JsonConvert.DeserializeObject<dynamic>(streamReader.ReadToEnd());
streamReader.Close();
return (T)jsonObj[key];
}
catch (Exception e)
{
MessageBox.Show(e.Message + "/r/n" + e.StackTrace);
}
return default;
}
/// <summary>
/// 修改JSON
/// </summary>
public static void WriteJSON<T>(string key,T value)
{
try
{
string path = Application.StartupPath + @"\appsettings.json";
StreamReader streamReader = new StreamReader(path);
dynamic jsonObj = JsonConvert.DeserializeObject<dynamic>(streamReader.ReadToEnd());
jsonObj[key] = value;
streamReader.Close();
string output = JsonConvert.SerializeObject(jsonObj, Formatting.Indented);
File.WriteAllText(path, output);
}
catch (Exception e)
{
MessageBox.Show(e.Message + "/r/n" + e.StackTrace);
}
}
}
}
三、具体业务
1.开机自启
复选框的change事件:当单选框选中时,将程序添加至注册表中,未选中时从注册表中移除。并修改配置文件中IsAutoBoot的值。
private void ck_Selfstart_CheckedChanged(object sender, EventArgs e)
{
try
{
string execPath = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
if (ck_Selfstart.Checked)
{
rk2.SetValue("MyExec", execPath);
}
else
{
rk2.DeleteValue("MyExec", false);
}
rk2.Close();
rk.Close();
JSONHelper.WriteJSON("IsAutoBoot", ck_Selfstart.Checked);
}
catch (Exception ex)
{
MessageBox.Show(string.Format("[注册表操作]向注册表写开机启动信息失败, Exception: {0}", ex.Message));
}
}
窗体加载事件中,通过读取配置文件得到是否开启开机自动启动,给单选框选中或不选中
ck_Selfstart.Checked=JSONHelper.ReadJSON<string>("IsAutoBoot");
2.记住密码
这里简单说一下逻辑顺序就好了,复选框change事件可以不作处理,在用户登录成功的时候判断记住密码的复选框是否打勾就好了,如果为true将账户密码和IsRememberPwd都写入json文件,登录失败则不处理。
3.自动登录
在记住密码的前提上再加判断就行了,在窗体加载事件中先判断是否记住密码,再判断是否自动登录,如果都满足则自动执行登录逻辑即可。(勾选自动登录同时会将记住密码勾上,因为记住密码是自动登录的前提)
下面是我自己项目中的一部分代码:


WinForm应用程序的开机自启、记住密码,自动登录的实现的更多相关文章
- Android记住密码自动登录的实现
我采用的是SharedPreferences来存取数据的,所以先简单的介绍一下SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存 ...
- php 记住密码自动登录
当我们登录网站管理后台的时候,会有提示说记住登录状态,记住我等这样的提示,这个选项有什么用呢?如果选中了记登录状态后,下次在浏览这个网站后 台时就不用在填写用户名和密码了,在去登录了.下面写了一小代码 ...
- php实现记住密码自动登录的功能
$username=trim($_POST['username']); $password=md5(trim($_POST['password'])); $ref_url=$_GET['req_url ...
- (转)asp.net 使用cookie完成记住密码自动登录
代码如下 复制代码 string username = this.txtUserName.Text;//用户名 string password = this.txtPassword.T ...
- Win7下怎么设置让远程桌面连接记住密码下次登录不需再输入
远程桌面连接功能想必大家都不会陌生吧,特别是使用VPS服务器的用户们经常会用到,为了服务器的安全每次都会把密码设置的很复制,但是这样也有一个麻烦,就是每次要桌面远程连接的时候都要输入这么复杂的密码,很 ...
- 运用cookie实现记住密码自动登陆:
苦命的程序员:只有博客才能了解我的路!!! 废话不多说:直接上代码: 1.首先在现在登录的页面上来获取cookie的所有: 2.在验证页面来设置clookie的用户名和密码还有是否是自动登录: 到此就 ...
- Windows 操作系统如何使程序开机自启
Windows 操作系统如何开机自启 一.前言: 作为一只运维开发,很多时候需要将自己的小工具做开机自启.在 Linux 的世界里,如果你希望一个程序可以开机自启,那么可以在/etc/rc.d/rc. ...
- SharedPreferences实现自动登录记住用户名密码
最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现. SharedPreferences简介 SharedPreferences ...
- Spring Security框架下实现两周内自动登录"记住我"功能
本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...
随机推荐
- JavaIO——System对IO的支持、序列化
1.系统类对IO的支持 在我们学习PriteWriter.PrintStream里面的方法print.println的时候是否观察到其与我们之前一直使用的系统输出很相似呢?其实我们使用的系统输出就是采 ...
- oracle(创建数据库对象)
1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[ba ...
- 银行业评分卡制作——IV、WOE
参考链接:https://blog.csdn.net/kevin7658/article/details/50780391 1.IV的用途 IV的全称是Information Value,中文意思是信 ...
- Docker从入门到精通(一)——初识
1.Docker 是什么? Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容 ...
- 如何使用cURL获得请求/响应具体耗时?
如何使用cURL一次测量请求和响应时间? cURL支持格式化输出请求的详细信息(请参阅cURL手册页的-w.–write out<format>获取更多信息). 如题,我们将只关注如何知晓 ...
- tableau绘制热力地图
一.右键国家地区和城市字段分别设置为地理角色-国家地区和城市 二.双击国家地区和城市添加到工作表 三.把订单id拖拽至标记卡的详细信息,标记改为密度显示,颜色设置为温度发散 四.最终整理结果如下图所示
- linux小应用 —— 日志过滤
先说问题,统计一个日志文件中去重之后的ip地址的个数.其实这是一个非常常见也比较简单的问题,其中我个人认为最主要的应该是匹配ip地址是这个问题的核心.剩下的就是对linux命令的熟练程度的问题了.首先 ...
- Spring Cloud Alibaba微服务架构入门最容易理解篇
微服务架构介绍 Spring Cloud Alibaba推荐的微服务生态架构基于分层架构实现如下: 接入层:最外层为LVS+Keepalived,可承受几十万级高并发流量洪峰,然后再通过内层的ngin ...
- IDEA添加yaml自动补全语法插件
问题:编写yml文件的时候,系统不能给自动补全 解决办法:File---->Settings---->Plugins---->搜索Spring Assistant x 项目效果预览
- let, const用法以及与var的区别
let 定义变量; 作用域:全局作用域,块级作用域(简单说,是指一对大括号{}): 无预解析机制(简单说,变量需要在声明的位置后面使用): 不可以重复定义. const 定义常量: 作用域: 块级作用 ...