WinForm應用程式的開機自啟、記住密碼,自動登入的實現
阿新 • • 發佈:2022-01-04
一、思路:
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.自動登入
在記住密碼的前提上再加判斷就行了,在窗體載入事件中先判斷是否記住密碼,再判斷是否自動登入,如果都滿足則自動執行登入邏輯即可。(勾選自動登入同時會將記住密碼勾上,因為記住密碼是自動登入的前提)
下面是我自己專案中的一部分程式碼: