[C#] อ่าน/เขียน Registry ตอนที่ 1 (แนะนำ+คำสั่งพื้นฐาน)

หลายครั้งที่โปรแกรมของเราต้องการเขียนข้อมูลลงในส่วนที่ลับที่สุด อาทิ เช่น เก็บข้อมูลการลงโปรแกรมครั้งแรก เพื่อข้อมูลวันที่ผู้ใช้ลงงานลงโปรแกรมครั้งแรก และเอามาจับเวลา กรณีที่เป็น shareware วันนี้ผมได้เขียนบทความอ่าน / เขียน Registry คร่าวๆ

คำเตือน

  • การแก้ไขข้อมูลใน Registry นั้นความเสี่ยง ก่อนจะทำการแก้ไขอะไร ควรทำการ Backup ข้อมูลให้เรียบร้อยก่อน

Registry คือ อะไร

  • Registry คือ คลังข้อมูลของ Windows ที่เก็บค่า config ต่างๆ ของระบบทั้ง Hardware และ Software โดยมีการจัดเก็บในรูปแบบลำดับขั้น(Hierarchical Database) หรืออาจจะมองเป็นต้นไม้ได้
  • จากรูปด้านบน ขออธิบายโครงสร้างนิดนึง
    • Hives คือ โครงสร้างหลักของ Registry เลย มักขึ้นต้นด้วย HKEY_xxx เปรียบเป็นกิ่งหลักของต้นไม้ (ถ้าเปรียบกับคอม คือ Harddisk)
    • Keys คือ กิ่งย่อยที่แตกออกมา แยกตามหมวดหมู่ไว้ (ถ้าเปรียบกับคอม คือ Folder เช่น Program File)
    • SubKeys คือ กิ่งสาขาที่แตกมาจากกิ่งย่อยอีกที (ถ้าเปรียบกับคอม คือ Sub Folder เช่น xammp ที่อยู่ใน ProgramFiles อีกที)
    • Values คือ ใบไม้ที่อยู่ตามกิ่งสาขา (ถ้าเปรียบกับคอม คือ ไฟล์ต่างๆในระบบ เช่น ไฟล์ word, ไฟล์ exe เป็นต้น)

คำสั่ง C# ที่ใช้จัดการ Registry

  • ต้องมีการเรียกใช้ Library จากคำสั่งที่จำเป็น ดังนี้
using Microsoft.Win32;
  • เปิดการใช้งาน Hives ติดต่อ HKEY_xxx ต่างๆ ดังนี้
HKEY_xxx ใน Registry Editorคำสั่งในภาษา c# ของ Class Registry
HKEY_CURRENT_CONFIGRegistry.CurrentConfig
HKEY_CURRENT_USERRegistry.CurrentUser
HKEY_DYN_DATARegistry.DynData
HKEY_LOCAL_MACHINE.Registry.LocalMachine
HKEY_PERFORMANCE_DATARegistry.PerformanceData
HKEY_USERSRegistry.Users
HKEY_CLASSES_ROOTRegistry.ClassesRoot
  • ตัวอย่าง เช่น หากเราเปิดการเชื่อมต่อ Hives HKEY_LOCAL_MACHINE เขียนคำสั่งได้ ดังนี้
RegistryKey baseRegistryKey = Registry.LocalMachine;
  • เชื่อมต่อ Keys และ SubKeys มีรูปแบบคำสั่งที่นิยมให้กัน 2 แบบ ดังนี้
    • กรณีที่เปิด Subkeys และไม่อนุญาติให้แก้ไขข้อมูล ใช้คำสั่ง OpenSubKey("Keys และ SubKeys") ดังตัวอย่าง ดังนี้
RegistryKey registrySubKey = registryKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation");
  • กรณีที่เปิด Subkeys และอนุญาติให้แก้ไขข้อมูล ใช้คำสั่ง OpenSubKey("Keys และ SubKeys", อนุญาติให้แก้ไขข้อมูลได้ หรือไม่) ดังตัวอย่าง ดังนี้
string mStrRegistryPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\OEMInformation";
RegistryKey registrySubKey = registryKey.OpenSubKey(mStrRegistryPath, true);
  • อ่านข้อมูลจาก Values ใช้คำสั่ง GetValue("ชื่อ Value") โดยคำสั่งนี้ Return ข้อมูลออกมาเป็น Object ดังตัวอย่าง ดังนี้
  • หากต้องการอ่านค่า Value ชื่อ "SUPPORTURL" มาใส่ตัวแปร url ซึ่งมีชนิดข้อมูลแบบ String สามารถเขียนคำสั่งได้ ดังนี้
string lStrSupportURL = registrySubKey.GetValue("SUPPORTURL").ToString();
  • เมื่อต้องการที่จะเพิ่ม หรือ แก้ไขValues ใช้คำสั่ง SetValue("ชื่อ Value", ค่าที่ต้องการ)
    • หากต้องการเขียน หรือแก้ไขค่า Value ชื่อ "SUPPORTURL" โดยแก้ข้อมูลเป็น www.debuggingsoft.com/blog สามารถเขียนคำสั่งได้ ดังนี้
registrySubKey.SetValue("SUPPORTURL","www.debuggingsoft.com/blog");
  • เมื่อแก้ไขเสร็จ ต้องใช้คำสั่ง Close เพื่อตัดการเชื่อมต่อ และเคลียร์ Buffer โดยเขียนคำสั่งได้ ดังนี้
baseRegistryKey.Close();


ต่อไปเป็นบทความหน้าเป็นตัวอย่างการใช้งานคร่าวๆ ตามกรณีต่างๆครับ 😀


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.