jamesband007
جمعه 11 دی 1388, 20:52 عصر
سلام
می خواستم طریقه ی خواندن مقادیر ریجستری از نوع REG_NONE رو در C#.net 2005 بدونم (نوشتن رو هم که بگید ، فبها)
این رو هم بگم که متد GetValue از کلاس RegistryKey قادر به خواندن این نوع از مقادیر نیست .
اگه با API یا P-invoke بدستش میارید ، لطفا برنامه رو بفرستید .
برای مثال اگر برنامه Internet Download Manager رو نصب کرده باشید در شاخه ی :
HKEY_CURRENT_USER/Software/DownloadManager/ListSettings
از این نوع مقادیر وجود دارد .
ممنون از محبتی که می کنید .
mehdi.mousavi
شنبه 12 دی 1388, 14:02 عصر
سلام می خواستم طریقه ی خواندن مقادیر ریجستری از نوع REG_NONE رو در C#.net 2005 بدونم (نوشتن رو هم که بگید ، فبها) این رو هم بگم که متد GetValue از کلاس RegistryKey قادر به خواندن این نوع از مقادیر نیست . اگه با API یا P-invoke بدستش میارید ، لطفا برنامه رو بفرستید.
سلام.
من نمیدونم این درخواست عجیب و غریب برای چه کاری هستش، اما مطمئن بشید که واقعا این کاری که میخواهید انجام بدید، صحیح هستش. چون واقعا REG_NONE کاربرد نداره، یا ندرتا استفاده میشه. قرار بود مایکروسافت تو نسخه 3.0 Framework پشتیبانی از REG_NONE رو اضافه کنه، که خوب، این کارو نکرد. در هر حال، بکمک این کد میتونید مقادیر REG_NONE رو بخونید. MyName اسم کلیدی هست که type اش REG_NONE هستش. لطفا به Unicode/ANSI بودن (و Comment هایی که گذاشتم) توجه کنید:
public class MyClass
{
[DllImport("advapi32.dll", SetLastError = true)]
public static extern int RegCloseKey(UIntPtr hKey);
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int RegOpenKeyEx(UIntPtr hKey, string subKey, int ulOptions, int samDesired, out UIntPtr hkResult);
[DllImport("advapi32.dll", CharSet = CharSet.Ansi, EntryPoint = "RegQueryValueExA", SetLastError = true)]
static extern int RegQueryValueEx(UIntPtr hKey, string lpValueName, int lpReserved, out uint lpType, System.Text.StringBuilder lpData, ref uint lpcbData);
//If you prefer the Unicode version, uncomment the following lines...
//[DllImport("advapi32.dll", CharSet = CharSet.Unicode, EntryPoint = "RegQueryValueExW", SetLastError = true)]
//static extern int RegQueryValueEx(UIntPtr hKey, string lpValueName, int lpReserved, out uint lpType, System.Text.StringBuilder lpData, ref uint lpcbData);
public void ReadRegValue()
{
UIntPtr hKey = UIntPtr.Zero;
if (RegOpenKeyEx(/*HKEY_LOCAL_MACHINE*/new UIntPtr(0x80000002u), null, 0, /*KEY_READ*/0x00020019, out hKey) == 0)
{
uint size = 1024;
uint type;
string keyValue = null;
StringBuilder keyBuffer = new StringBuilder();
if (RegQueryValueEx(hKey, "MyName", 0, out type, keyBuffer, ref size) == 0)
{
keyValue = keyBuffer.ToString();
//Do whatever suits you...
}
RegCloseKey(hKey);
}
}
ضمنا، من برای سریعتر نوشتن کد، Const ها رو جداگانه تعریف نکردم و فقط comment گذاشتم. شما باید توی production-code حتما const ها رو جداگانه و مرتب تعریف کنید.
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.