اگه اشتباه نکنم یک بار تعریف شده از نوع boolean هستش تو خط اول تعریف تو خط دوم مقدار دهی در مقدار دهی هم می تونه True یا False باشه.نقل قول:
Printable View
اگه اشتباه نکنم یک بار تعریف شده از نوع boolean هستش تو خط اول تعریف تو خط دوم مقدار دهی در مقدار دهی هم می تونه True یا False باشه.نقل قول:
سلام
حواسم نبوده ...نقل قول:
چیز! اون متغییر bVistaOrAbove در ابتدا دو بار مقدار دهی شده
در طی مراحل نوشتن و برای امتحان، آن خط را اضافه کردم و بعد یادم رفت حذفش کنم و اینجا بگذارم.
کد اصلاح شد.
ممنون.
ممنونم
اما كد شما مثل كدهاي ديگري كه قبلا تست كره بودم روي سيستم شركت جواب نداد
هارد سيستم شركت hitachi HDS721050CLA362
نمي دونم چرا هر كدي تست ميكنم به غير از كدي كه از همون سايت تاپيك اول گرفتم جواب نداد
سلام
پیشنهاد میکنم اول این کد را امتحان کنید که بهبود یافته همان کد قبلی است:
بعد این یکی را هم امتحان کنید:کد:public static string GetHddSerial1(int disk)
{
string strDeviceID = null;
bool bVistaOrAbove = System.Environment.OSVersion.Version.Major >= 6.0;
using (var list = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"))
{
foreach (var item in list.Get())
{
try
{
object obj = item.Properties["Index"].Value;
if ((obj == null) || (System.Convert.ToInt32(obj) != disk)) continue;
if (bVistaOrAbove)
{
string ret = item.Properties["SerialNumber"].Value as string;
if (!string.IsNullOrEmpty(ret)) return ret;
}
strDeviceID = item.Properties["DeviceID"].Value as string;
break;
}
catch { }
}
}
if (string.IsNullOrEmpty(strDeviceID)) return null;
using (var list = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"))
{
foreach (var item in list.Get())
{
try
{
object obj = item.Properties["Tag"].Value;
if (!(string.Equals(strDeviceID, obj as string, System.StringComparison.OrdinalIgnoreCase))) continue;
string ret = item.Properties["SerialNumber"].Value as string;
if (!string.IsNullOrEmpty(ret)) return ret;
break;
}
catch { }
}
}
return null;
}
کد:public static string GetHddSerial2(int disk)
{
string strPNPDeviceID = null;
bool bVistaOrAbove = System.Environment.OSVersion.Version.Major >= 6.0;
using (var list = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"))
{
foreach (var item in list.Get())
{
try
{
object obj = item.Properties["Index"].Value;
if ((obj == null) || (System.Convert.ToInt32(obj) != disk)) continue;
if (bVistaOrAbove)
{
string ret = item.Properties["SerialNumber"].Value as string;
if (!string.IsNullOrEmpty(ret)) return ret;
}
strPNPDeviceID = item.Properties["PNPDeviceID"].Value as string;
break;
}
catch { }
}
}
if (string.IsNullOrEmpty(strPNPDeviceID)) return null;
using (var list = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity"))
{
foreach (var item in list.Get())
{
try
{
object obj = item.Properties["PNPDeviceID"].Value;
if (!(string.Equals(strPNPDeviceID, obj as string, System.StringComparison.OrdinalIgnoreCase))) continue;
string ret = item.Properties["Name"].Value as string;
if (!string.IsNullOrEmpty(ret)) return ret;
break;
}
catch { }
}
}
return null;
}
سلام
كد رو روي همون سيستم ذكر شده تست كردم:
كد اول جواب نداد و اما كد دوم همون نام هارد كه در تاپيك قبلي گذاشتم رو برميگردونه
راه حلي هست كه بشه روي تمام سيستم ها يك كد خاص پيدا كرد؟
با سلام
لینک های زیر را چک کنید :
کد:http://www.codeproject.com/KB/cs/hard_disk_serialno.aspx
به نظر من بهتره چندتا از مشخصات سیستم را بگیرید.کد:http://www.codeproject.com/KB/mcpp/DriveInfoEx.aspx
مانند :
سریال هارد
سریال مادربرد
سریال پردازنده
و ...
و در شرط خود بگید چک کند مثلا اگر 2 تا از سزیال ها با هم برابری می کرد و تنها یکی از ان ها مثل هم نبود. از ان سریال چشم پوشی کند. چون ممکن است ان سریال تحت فرمت کردن و نصب مجدد ویندوز تغییر کرده باشد.
-------------
اما به نظرم بهتره از قفل سخت افزاری استفاده کنید.
با تشکر