一、思路:

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应用程序的开机自启、记住密码,自动登录的实现的更多相关文章

  1. Android记住密码自动登录的实现

    我采用的是SharedPreferences来存取数据的,所以先简单的介绍一下SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存 ...

  2. php 记住密码自动登录

    当我们登录网站管理后台的时候,会有提示说记住登录状态,记住我等这样的提示,这个选项有什么用呢?如果选中了记登录状态后,下次在浏览这个网站后 台时就不用在填写用户名和密码了,在去登录了.下面写了一小代码 ...

  3. php实现记住密码自动登录的功能

    $username=trim($_POST['username']); $password=md5(trim($_POST['password'])); $ref_url=$_GET['req_url ...

  4. (转)asp.net 使用cookie完成记住密码自动登录

     代码如下 复制代码 string username = this.txtUserName.Text;//用户名        string password = this.txtPassword.T ...

  5. Win7下怎么设置让远程桌面连接记住密码下次登录不需再输入

    远程桌面连接功能想必大家都不会陌生吧,特别是使用VPS服务器的用户们经常会用到,为了服务器的安全每次都会把密码设置的很复制,但是这样也有一个麻烦,就是每次要桌面远程连接的时候都要输入这么复杂的密码,很 ...

  6. 运用cookie实现记住密码自动登陆:

    苦命的程序员:只有博客才能了解我的路!!! 废话不多说:直接上代码: 1.首先在现在登录的页面上来获取cookie的所有: 2.在验证页面来设置clookie的用户名和密码还有是否是自动登录: 到此就 ...

  7. Windows 操作系统如何使程序开机自启

    Windows 操作系统如何开机自启 一.前言: 作为一只运维开发,很多时候需要将自己的小工具做开机自启.在 Linux 的世界里,如果你希望一个程序可以开机自启,那么可以在/etc/rc.d/rc. ...

  8. SharedPreferences实现自动登录记住用户名密码

    最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现.   SharedPreferences简介 SharedPreferences ...

  9. Spring Security框架下实现两周内自动登录"记住我"功能

    本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...

随机推荐

  1. ping (网络诊断工具)

    Ping是Windows.Unix和Lnix系统下的一个命令,ping也属于一个通信协议,是TCP/IP协议的一部分,利用Ping命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障.应用格 ...

  2. spring boot集成swagger文档

    pom <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifa ...

  3. 【Linux】【Services】【SaaS】Docker+kubernetes(6. 安装和配置ceph)

    1. 简介 1.1. 这个在生产中没用上,生产上用的是nfs,不过为了显示咱会,也要写出来 1.2. 官方网站:http://ceph.com/ 1.3. 中文网站:http://docs.ceph. ...

  4. 使用缓冲流和byte数组,拷贝文件

    package com.itcast.demo05.Buffered;import java.io.*;/** * @author newcityman * @date 2019/7/28 - 17: ...

  5. Nginx配置正向代理

    目录 一.简介 二.配置 三.参数 一.简介 场景: 用于内网机器访问外网,就需要正向代理,类似VPN. 原理: A机器可以访问外网,而B,C,D机器只能内网,便可以设立正向代理,将B,C,D机器的访 ...

  6. java多线程8:阻塞队列与Fork/Join框架

    队列(Queue),是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的. BlockingQueue 而阻塞队列BlockingQueue除了继承 ...

  7. tcache poisoning(爆破stout获得libc并且熟练使用了realloc)

    这道题目帮助我学习了realloc这个函数,是一道十分经典的题目,我会尽量的把exp的每一步都说清楚 例行检查我就不放了 讲程序放入ida中 比较简单的流程,没有show功能,所有我们需要通过爆破st ...

  8. [BUUCTF]PWN——pwnable_hacknote

    pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...

  9. 修复 Edge 浏览器 1Password 插件 Ctrl+Shift+X 弹出快捷键失效

    解决方式 在 Edge 浏览器右上角 1Password插件图标上右键,选择设置: 在打开的 1Password 设置页面中,找到快捷键设置环节,默认使用快捷键打开后面为空,点击"在扩展也上 ...

  10. CF1043A Elections 题解

    Content 有两个人参加选举,其中已知 \(n\) 位选民投给第二个人的票数为 \(a_1,a_2,a_3,...,a_n\).第一个人很想赢,所以想通过调整每位选民只能投的票数 \(k\) 来让 ...