หลายครั้งที่โปรแกรมของเราต้องการเขียนข้อมูลลงในส่วนที่ลับที่สุด อาทิ เช่น เก็บข้อมูลการลงโปรแกรมครั้งแรก เพื่อข้อมูลวันที่ผู้ใช้ลงงานลงโปรแกรมครั้งแรก และเอามาจับเวลา กรณีที่เป็น shareware วันนี้ผมได้เขียนบทความอ่าน / เขียน Registry คร่าวๆ
บทความในชุดนี้มี 4 ตอน ดังนี้ครับ
คำเตือน
- การแก้ไขข้อมูลใน 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_CONFIG | Registry.CurrentConfig |
HKEY_CURRENT_USER | Registry.CurrentUser |
HKEY_DYN_DATA | Registry.DynData |
HKEY_LOCAL_MACHINE. | Registry.LocalMachine |
HKEY_PERFORMANCE_DATA | Registry.PerformanceData |
HKEY_USERS | Registry.Users |
HKEY_CLASSES_ROOT | Registry.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 sent to your email.