PDA

View Full Version : سوال: یافتن سریال هارد بدون استفاده از dll



unassigned_identifier
سه شنبه 22 اردیبهشت 1388, 11:52 صبح
کد یافتن سریال هارد بدون استفاده از dll در سی شارپ 2008 چیست؟؟؟؟؟؟؟

bahman_akbarzadeh
سه شنبه 22 اردیبهشت 1388, 12:26 عصر
با اين كلاس ميتونين شماره سريال تمام ديسك هاي Fix و Removeable رو در بيارين.



using System;
using System.Collections;
using System.Management;




class HardDrive
{
private string model = null;
private string type = null;
private string serialNo = null;

public string Model
{
get {return model;}
set {model = value;}
}

public string Type
{
get {return type;}
set {type = value;}
}

public string SerialNo
{
get {return serialNo;}
set {serialNo = value;}
}
}

class HDDID
{
public ArrayList HDDCollection = new ArrayList();

public HDDID()
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

foreach (ManagementObject wmi_HD in searcher.Get())
{
HardDrive hd = new HardDrive();
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();

HDDCollection.Add(hd);
}

searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

int i = 0;
foreach (ManagementObject wmi_HD in searcher.Get())
{
// get the hard drive from collection
// using index
HardDrive hd = (HardDrive)HDDCollection[i];

// get the hardware serial no.
if (wmi_HD["SerialNumber"] == null)
hd.SerialNo = "None";
else
hd.SerialNo = wmi_HD["SerialNumber"].ToString();

++i;
}
}

public HardDrive GetMasterIDE()
{
for (int i = 0; i < HDDCollection.Count; i++)
{
if (((HardDrive)HDDCollection[i]).Type.ToUpper() == "IDE")
return (HardDrive)HDDCollection[i];
}
return null;
}
}

فقط كافيه يك شي از HDDID تعريف كنين و از HDDCollection استفاده كنين.
اگر فقط شماره سريال هارد مستر رو ميخواين، يه تابع آخرش نوشتم كه بر اساس نوع ديسك، اولين هارد مستر رو براتون برميگردونه.



HDDID h = new HDDID();
lable1.Text = h.GetMasterIDE().SerialNo;

unassigned_identifier
سه شنبه 22 اردیبهشت 1388, 12:46 عصر
ManagementObjectSearcher در سی شارپ 2008 شناخته شده نیست. حتی با using system.managment

bahman_akbarzadeh
سه شنبه 22 اردیبهشت 1388, 14:48 عصر
شرمنده يادم رفت nameSpace هاشو بزارم.
در بالا تصحيح ميكنم.
در ضمن ميتونستيد خودتون در ClassView جستجو كنيد و پيداش كنيد.

unassigned_identifier
سه شنبه 22 اردیبهشت 1388, 22:15 عصر
در سی شارپ 2008 با این namespace ها جواب نمی ده:عصبانی++:

behzadk
سه شنبه 22 اردیبهشت 1388, 23:02 عصر
این یه نمونه wmi است اگه یه کم دقت کنی حتما به نتیحپجه می رسی

bahman_akbarzadeh
چهارشنبه 23 اردیبهشت 1388, 00:05 صبح
تو 2008 بايد Add Reference كنين.
از Solution Explorer روي Refrences كليك راست كنين و Add Reference رو انتخاب كنين.
بعد System.Management رو اضافه كنين.

debugger
سه شنبه 29 اردیبهشت 1388, 17:17 عصر
با اين كلاس ميتونين شماره سريال تمام ديسك هاي Fix و Removeable رو در بيارين.



using System;
using System.Collections;
using System.Management;




class HardDrive
{
private string model = null;
private string type = null;
private string serialNo = null;


public string Model
{
get {return model;}
set {model = value;}
}


public string Type
{
get {return type;}
set {type = value;}
}


public string SerialNo
{
get {return serialNo;}
set {serialNo = value;}
}
}


class HDDID
{
public ArrayList HDDCollection = new ArrayList();


public HDDID()
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");


foreach (ManagementObject wmi_HD in searcher.Get())
{
HardDrive hd = new HardDrive();
hd.Model = wmi_HD["Model"].ToString();
hd.Type = wmi_HD["InterfaceType"].ToString();


HDDCollection.Add(hd);
}


searcher = new
ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");


int i = 0;
foreach (ManagementObject wmi_HD in searcher.Get())
{
// get the hard drive from collection
// using index
HardDrive hd = (HardDrive)HDDCollection[i];


// get the hardware serial no.
if (wmi_HD["SerialNumber"] == null)
hd.SerialNo = "None";
else
hd.SerialNo = wmi_HD["SerialNumber"].ToString();


++i;
}
}


public HardDrive GetMasterIDE()
{
for (int i = 0; i < HDDCollection.Count; i++)
{
if (((HardDrive)HDDCollection[i]).Type.ToUpper() == "IDE")
return (HardDrive)HDDCollection[i];
}
return null;
}
}



فقط كافيه يك شي از HDDID تعريف كنين و از HDDCollection استفاده كنين.



اگر فقط شماره سريال هارد مستر رو ميخواين، يه تابع آخرش نوشتم كه بر اساس نوع ديسك، اولين هارد مستر رو براتون برميگردونه.






HDDID h = new HDDID();


lable1.Text = h.GetMasterIDE().SerialNo;







ميشه بگي چطوري ميشه سريال Removable Disk را پيدا كرد ؟؟؟؟؟ به اون ارايه اي كه در نظر گرفتي فقط IDE اضافه ميشه. ديگر ديسك ها را به دست نمياره

من ميخوام كدي بنويسم كه اگر در سيستم فلش ديسكي وصل بود پيداش كنه و سريالش را برگردونه . با هارد اصلا كاري ندارم

r12784
چهارشنبه 30 اردیبهشت 1388, 11:09 صبح
سلام ببخشید که سوال من ربطی به ای بخش نداره : می خواستم بدونم چه طوری میتونم تو این سایت علاوه بر پاسخ دادن به کاربرهای مختلف سوال هام رو نیز به صورت عمومی بیان کنم و جواب هم بگیرم مثل کاری که شما کردید.:بوس:

dr_csharp
چهارشنبه 30 اردیبهشت 1388, 11:30 صبح
سلام ببخشید که سوال من ربطی به ای بخش نداره : می خواستم بدونم چه طوری میتونم تو این سایت علاوه بر پاسخ دادن به کاربرهای مختلف سوال هام رو نیز به صورت عمومی بیان کنم و جواب هم بگیرم مثل کاری که شما کردید.:بوس:
سلام دوست من
شما کافیه در صفحه ی اصلی (http://barnamenevis.org/forum/forumdisplay.php?f=26) ، از قسمت بالای صفحه کلید موضوع جدید رو انتخاب کنید .. :لبخندساده:

bahman_akbarzadeh
جمعه 01 خرداد 1388, 12:47 عصر
ميشه بگي چطوري ميشه سريال Removable Disk را پيدا كرد ؟؟؟؟؟ به اون ارايه اي كه در نظر گرفتي فقط IDE اضافه ميشه. ديگر ديسك ها را به دست نمياره

من ميخوام كدي بنويسم كه اگر در سيستم فلش ديسكي وصل بود پيداش كنه و سريالش را برگردونه . با هارد اصلا كاري ندارم

تا اونجايي كه يادمه Removeable Disk هارو هم برميگردوند.
خاصيت Type كلاس مورد نظر اين مسئله رو مشخص ميكنه.
البته اگه ميخواين يك ليسنر بنويسين كه دائما پورت USB رو چك كنه كه اگه فلش خورده بود عمل خاصيو انجام بده، بهتره اين كارو نكنين. چون پردازش زيادي ميگيره و كارا نيست.
شما بايد به Intterupt Vector سيستم عامل دسترسي داشته باشين و آدرس وقفه اون تابعي كه موقع وقفه Add Hardware انجام ميشه رو مساوي آدرس تابع مورد نظر خودتون قرار بدين و در نهايت براي اينكه در عملكرد سيستم عامل مشكلي پيش نياد، دوباره تابع خودشو فراخوني كنين.
تنها مشكلي كه اينجا هست اينه كه من تو C# اين كارو انجام ندادم :لبخند:. فقط تو ++C اونم تحت داس انجام دادم و تو C++.Net عملي نيست.
اگه كسي دنبال اين مسئله رفت، به ما هم اطلاع بده. ممنونش ميشيم.

debugger
جمعه 01 خرداد 1388, 19:13 عصر
يك كد زيبا و محشر بعد از چند ساعت فكر براش نوشتم . كه بسيار عالي عمل مي كنه

بزودي در بخش برنامه هاي كاربردي ريليز مي كنم

blue.star
دوشنبه 30 آبان 1390, 23:32 عصر
سلام ، خسته نباشید .

من یه هارد اکسترنال به سیستمم وصل کردم.

خیلی سعی کردم که با این کلاس سریال هارد مستر رو بدست بیارم ولی نتونستم

میتونم خواهش کنم ازتون پیاده سازی شده ی همین کلاس رو تو یه برنامه در اختیارمون بذارین؟؟؟

خیلی برام مهمه چون باید برنامم رو زود تحویل بدم!!!