PDA

View Full Version : دریافت سریال هارد دیسک در شرایط مختلف



hesam_hma
پنج شنبه 04 بهمن 1386, 23:32 عصر
دوستان سلام
من روشهایی رو جهت خواندن سریال هارد دیسک امتحان کردم اما متاسفانه هر کدوم از این روشها در شرایط خاصی جواب می دهد به عنوان مثال بعضی با هارد ساتا بعضی با ای دی ای و ... و بعضی با سیستم عامل ویندوز ویستا جواب نمی دهند از دوستان اگه کسی کلاسی داره که در هر شرایطی سریال هارد دیسک رو بخونه ممنون میشم به ما هم بده استفاده کنیم
متشکرم

amirsajjadi
جمعه 05 بهمن 1386, 10:56 صبح
با استفاده از WMI میشه تمام اطلاعات منابع سخت افزاری و نرم افزاری سیستم رو بدست آورد
یک سرچ بزنی (توی گوگل) مطالب خوبی رو پیدا میکنی

saman_itc
جمعه 05 بهمن 1386, 21:26 عصر
System.Management
APIs for performing WMI tasks.

از این کلاس باید استفاده کنی

saman_itc
جمعه 05 بهمن 1386, 21:42 عصر
این کد بدست اوردن سریال مادربورد تو Vb 6 همینو داشتم فقط


Public Function MBSerialNumber() As String

'RETRIEVES SERIAL NUMBER OF MOTHERBOARD
'IF THERE IS MORE THAN ONE MOTHERBOARD, THE SERIAL
'NUMBERS WILL BE DELIMITED BY COMMAS

'YOU MUST HAVE WMI INSTALLED AND A REFERENCE TO
'Microsoft WMI Scripting Library IS REQUIRED

Dim objs As Object

Dim obj As Object
Dim WMI As Object
Dim sAns As String


Set WMI = GetObject("WinMgmts:")
Set objs = WMI.InstancesOf("Win32_BaseBoard")
For Each obj In objs
sAns = sAns & obj.SerialNumber
If sAns < objs.Count Then sAns = sAns & ","
Next
MBSerialNumber = sAns
End Function

saman_itc
جمعه 05 بهمن 1386, 21:48 عصر
این هارده



برای آشنایی بیشتر با WMI یا NameSpace های آن می تونید به MSDN مراجعه کنید.




using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_PhysicalMedia");

foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_PhysicalMedia instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("SerialNumber: {0}", queryObj["SerialNumber"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}

سریال سی دی :

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_CDROMDrive");

foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_CDROMDrive instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("VolumeSerialNumber: {0}", queryObj["VolumeSerialNumber"]);
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}

hesam_hma
جمعه 05 بهمن 1386, 22:32 عصر
دوستان من کد بدست آوردن سریال هارد رو دارم ، اما یا رو ساتا جواب میده یا رو آی دی ای همه جا جواب نمیده

saman_itc
جمعه 05 بهمن 1386, 22:40 عصر
خوب کدتو بزار ببینیم و تست کنیم

hesam_hma
جمعه 05 بهمن 1386, 22:49 عصر
' §«¢ ™ی©§ë «©یںé ىں©§ §ی«ک
Dim physicalMedia AsNew Management.ManagementClass("Win32_PhysicalMedia")
Dim serial_hdd AsString = ""
ForEach physicalMedium As Management.ManagementObject In physicalMedia.GetInstances()
serial_hdd = (CStr(physicalMedium("SerialNumber")))
Next physicalMedium

saman_itc
سه شنبه 09 بهمن 1386, 08:23 صبح
خودم نمی تونم این کلا س Add کنم System.Management

amirsajjadi
چهارشنبه 10 بهمن 1386, 12:33 عصر
System.Management رو شما باید add کنید (از قسمت dllهای دات نت)

aminva
شنبه 11 اسفند 1386, 00:08 صبح
WMI و API مربوط به ویژوال 6 هستن درسته؟
معادل اونها در ویژوال 2005 چیه؟
اگه جواب منفی باشه یعنی مایکروسافت در دات نت پسرفت کرده؟!
ممنون می شم

alî_pr
جمعه 29 آبان 1388, 14:34 عصر
سلام،
در آدرس زیر یک پروژه خیلی کامل هست که انواع مشخصات کامپیوتر رو می تونید با اون برنامه بدست بیارید،
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
من برای استفاده خودم فقط چند تا موردش رو لازم داشتم که ترجیح دادم کدش رو ساده کنم و حالا برای شما هم می زارم:
این تابع اصلی هست:



private string GetPCInfo(string Key, string subKey)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + Key);
try
{
foreach (ManagementObject share in searcher.Get())
{
if (share.Properties.Count <= 0)
continue;
PropertyData PC = share.Properties[subKey];
if (PC.Value == null)
continue;
if (PC.Value.ToString() == "")
return "";
switch (PC.Value.GetType().ToString())
{
case "System.String[]":
string[] str = (string[])PC.Value;
string str2 = "";
foreach (string st in str)
str2 += st + " ";
return str2;
case "System.UInt16[]":
ushort[] shortData = (ushort[])PC.Value;
string tstr2 = "";
foreach (ushort st in shortData)
tstr2 += st.ToString() + " ";
return tstr2;
default:
return PC.Value.ToString();
}
}
}
catch
{
return "";
}
return "";
}


مثلا برای بدست آوردن مدل هارد از این کد استفاده کنید:


GetPCInfo("Win32_DiskDrive", "Model")

برای کامپیوتر من:


SAMSUNG HM251JI

مثال دوم:


GetPCInfo("Win32_DiskDrive", "PNPDeviceId")

برای کامپیوتر من:


IDE\DISKSAMSUNG_HM251JI_________________________2S S00_01\5&644099B&0&0.0.0

مثال آخر(شماره سی پی یو):


GetPCInfo("Win32_Processor", "ProcessorId")

برای کامپیوتر من:

BFEBFBFF00010676
در ضمن نتایجی که نوشتم برای لپ تاپ هست.
دوستان لطفا روی سیستم های خودشون تست کنن و جواب رو بذارن.
ممنون.