如何以寫程式的方式來變更 Windows 的登錄碼[原創][教程]

在執行 MIS 工作的時候,時不時的都會遇到有變更電腦登錄碼的需求,而且變更的不只是自己的一台電腦 ​, 而 ​通常會​ 是所有在工作上負責的電腦,這個數字可能是數台或數十台或數百台之多。如果要MIS人員逐一的去找到這些電腦,再逐一的去做設定那可就會是一個非常龎大工作量的工作,所以我們必須要用撰寫程式的方式來完成這些工作。

在這裡我們先把​本次教程範圍縮小到​變更登錄碼程式撰寫,暫時先不​提安裝方法。

首先建立一個​新的​主控台的專案








我們會用到 Microsoft. Win32 命名空間,所以要先引用。




再者我們會用到 ​方法 ​ GetValue 取得登錄碼的數值及​方法 ​SetValue 設定登錄碼的數值​。

登錄碼數值​的​種類可區分為
​   1.​字串值
​   2.二進制碼值
​   3.DWORD(32位元)值
​   4.QWORD(64位元)值
​   5.多字串值
​   6.可擴充字串值



通常我們比較常會用到的是字串值、多字串值、DWORD(32位元)值、QWORD(64位元)這四種​數值型態。​



​現在​我們先將設定機碼的工作撰寫成方法備用
​,如下:
        
        /// <summary>
        /// 設定字串值型態的登錄碼
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="sValue">數值</param>
        public void WriteRegistryString(string sDir, string sName, string sValue) {
            Registry.SetValue(sDir, sName, sValue, RegistryValueKind.String);
        }
        /// <summary>
        /// 設定多字串值型態的登錄碼
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="sValue">數值</param>
        public void WriteRegistryMultiString(string sDir, string sName, string[] sValue) {
            Registry.SetValue(sDir, sName, sValue, RegistryValueKind.MultiString);
        }
        /// <summary>
        /// 設定二進制碼值型態的登錄碼
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="sValue">數值</param>
        public void WriteRegistryBinary(string sDir, string sName, string sValue) {
            var bValue = Encoding.Unicode.GetBytes(sValue);
            Registry.SetValue(sDir, sName, bValue, RegistryValueKind.Binary);
        }
        /// <summary>
        /// 設定DWORD(32位元)值型態的登錄碼 
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="sValue">數值</param>
        public void WriteRegistryDWord(string sDir, string sName, int iValue) {
            Registry.SetValue(sDir, sName, iValue, RegistryValueKind.DWord);
        }
        /// <summary>
        /// 設定QWORD(64位元)值型態的登錄碼 
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="sValue">數值</param>
        public void WriteRegistryQWord(string sDir, string sName, int iValue) {
            Registry.SetValue(sDir, sName, iValue, RegistryValueKind.QWord);
        }




將取得機碼的工作撰寫成方法備用​,如下:​

        /// <summary>
        /// 取得登錄碼的數值 
        /// </summary>
        /// <param name="sDir">機碼的完整登錄路徑</param>
        /// <param name="sName">數值名稱</param>
        /// <param name="oValue">數值名稱不存在時所傳回的值</param>
        /// <returns></returns>
        public string ReadRegistryString(string sDir, string sName, object oValue) {
            return Registry.GetValue(sDir, sName, oValue).ToString();

        }

 ​
        


​現在​假設我們要設定一個​登錄​碼​如下圖紅框





它目前的數值是 "MorseApp",我們現在將它改成 "SuseApp",程式如下:





執行結果:





我們已成功的將數值 "MorseApp"變更為 "SuseApp"了。 


現在我們再試著撰寫程式,取得將指定的登錄碼,程式如下:



執行結果: 



Ok. 我們已經能夠正確的取得登錄碼的數值了。

留言

這個網誌中的熱門文章

[C#]Windows 10 停用與啟用網路卡(連線)[手把手教程][原創]

ASP.NET Web API 將傳回的值轉換從控制器動作至 HTTP 回應訊息的方式。

[C#]程式更改電腦IP位置與電腦名稱