飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

WinForm应用程序的开机自启、记住密码,自动登录的实现

时间:2022-01-04  作者:hyx1229  

一、思路:

1.开机自启,自然是需要用到注册表,我们需要把程序添加到电脑的注册表中去

2.记住密码,自动登录,开机自启,在页面的呈现我们都使用复选框按钮来呈现

3.数据持久化,不能是数据库,可以是sqlite或txt、json文件。

二、数据持久化

1.这里我使用的是json文件,域名如下:

{
  "IsAutoBoot": false,//开机自启
  "TopMost": true,//是否永远置顶窗口
  "IsAutoLogin":false,//是否自动登录
  "IsRememberPwd":false,//是否记住密码
  "AccountNumber": "",
  "PassWord": "",
}

2.读取和写入json数据

using 域名;
using System;
using 域名ric;
using 域名;
using 域名;
using 域名;
using 域名s;
using 域名s;

namespace 域名ity
{
    public class JSONHelper
    {
        /// <summary>
        /// 读取JSON文件
        /// </summary>
        public static T ReadJSON<T>(string key)
        {
            try
            {
                string path = 域名tupPath + @"\域名";
                StreamReader streamReader = new StreamReader(path);
                dynamic jsonObj = 域名rializeObject<dynamic>(域名ToEnd());
                域名e();
                return (T)jsonObj[key];
            }
            catch (Exception e)
            {
                域名(域名age + "/r/n" + 域名kTrace);
            }
            return default;
        }
        /// <summary>
        /// 修改JSON
        /// </summary>
        public static void WriteJSON<T>(string key,T value)
        {
            try
            {
                string path = 域名tupPath + @"\域名";
                StreamReader streamReader = new StreamReader(path);
                dynamic jsonObj = 域名rializeObject<dynamic>(域名ToEnd());
                jsonObj[key] = value;
                域名e();
                string output = 域名alizeObject(jsonObj, 域名nted);
                域名eAllText(path, output);

            }
            catch (Exception e)
            {
                域名(域名age + "/r/n" + 域名kTrace);
            }
        }
    }
}

三、具体业务

1.开机自启

复选框的change事件:当单选框选中时,将程序添加至注册表中,未选中时从注册表中移除。并修改配置文件中IsAutoBoot的值。

private void ck_Selfstart_CheckedChanged(object sender, EventArgs e)
{
    try
    {
        string execPath = 域名utablePath;
        RegistryKey rk = 域名lMachine;
        RegistryKey rk2 = 域名teSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
        if (域名ked)
        {
            域名alue("MyExec", execPath);
        }
        else
        {
            域名teValue("MyExec", false);
        }
        域名e();
        域名e();
        域名eJSON("IsAutoBoot", 域名ked);
    }
    catch (Exception ex)
    {
        域名(域名at("[注册表操作]向注册表写开机启动信息失败, Exception: {0}", 域名age));
    }
}

窗体加载事件中,通过读取配置文件得到是否开启开机自动启动,给单选框选中或不选中

域名ked=域名JSON<string>("IsAutoBoot");

2.记住密码

这里简单说一下逻辑顺序就好了,复选框change事件可以不作处理,在用户登录成功的时候判断记住密码的复选框是否打勾就好了,如果为true将账户密码和IsRememberPwd都写入json文件,登录失败则不处理。

3.自动登录

在记住密码的前提上再加判断就行了,在窗体加载事件中先判断是否记住密码,再判断是否自动登录,如果都满足则自动执行登录逻辑即可。(勾选自动登录同时会将记住密码勾上,因为记住密码是自动登录的前提)

下面是我自己项目中的一部分代码:

image
image

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。