如何以寫程式的方式來變更 Windows 的登錄碼[原創][教程]
在執行 MIS 工作的時候,時不時的都會遇到有變更電腦登錄碼的需求,而且變更的不只是自己的一台電腦 , 而 通常會 是所有在工作上負責的電腦,這個數字可能是數台或數十台或數百台 之多。如果要MIS人員逐一的去找到這些電腦,再逐一的去做設定 那可就會是一個非常龎大工作量的工作,所以我們必須要用撰寫程式 的方式來完成這些工作。
在這裡我們先把本次教程範圍縮小到變更登錄碼的程式撰寫, 暫時先不提安裝方法。
首先建立一個新的主控台的專案
再者我們會用到 方法 GetValue 取得登錄碼的數值及方法 SetValue 設定登錄碼的數值。
登錄碼數值的種類可區分為
1.字串值
2.二進制碼值
3.DWORD(32位元)值
4.QWORD(64位元)值
5.多字串值
6.可擴充字串值
通常我們比較常會用到的是字串值、多字串值、DWORD(32位
現在我們先將設定機碼的工作撰寫成方法備用
/// <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. 我們已經能夠正確的取得登錄碼的數值了。
留言
張貼留言