PDA

View Full Version : گرفتن سریال نامبر cpu یا هارد



jome ramezani
شنبه 18 شهریور 1385, 07:37 صبح
لطفا برای گرفتن سریال نامبر cpu یا هارد مرا راهنمایی کنید

M.GhanaatPisheh
شنبه 18 شهریور 1385, 13:11 عصر
راجع به WMI تحقیق کنید دوست عزیز
لینک زیر رو ببینید:
http://www.eggheadcafe.com/articles/20030511.asp

Application زیر رو هم ببینید و ایده کلی بگیرید:
http://rapidshare.de/files/31088011/Framework_-_Using_WMI.rar

برای مطالعه WMI از اطلاعات موجود در لینک زیر استفاده کنید:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_wmi.asp
نکته:
راه حلهای دیگری هم وجود داره که من توصیه نمی کنم.
مثلا کد زیر سریال CPU رو بهتون می ده. فقط یه مشکل کوچولو داره و اونم اینه که خارج از Windows XP جواب نمی ده. دلیلش هم اینه که CPU SN توی XP توی HKEY_LOCAL_MACHINE\SYSTEM\WPA\SigningHash-*...*\SigningHashData نگهداری می شه ولی توی سایر نسخه ها جای دیگه نگهداری می شه:



public static byte[] GetHardwareIdBytes()
{
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SYSTEM\WPA", false))
{
foreach (string subkey in rk.GetSubKeyNames())
{
if (subkey.IndexOf("SigningHash") == 0)
{
using (RegistryKey rk1 = rk.OpenSubKey(subkey))
{
return (byte[])rk1.GetValue("SigningHashData");
}
}
}
}
// It should never happen:
throw new Exception("There is no hardware id on this computer!");
}


Namespace زیر رو فراموش نکنید :
Microsoft.Win32


و یا می تونید از API به نام GetVolumeInformation موجود در kernel.dll و یا GetVolumeInformationA موجود در WinAPI32 استفاده کنید.

دوست عزیز مستقیم برید سراغ WMI و بعد از آشنایی از کلاسهای زیر برای گرفتن CPU SN استفاده کنید:


From Win32_BaseBoard: Tag, Manufacturer, Product and Version
From Win32_BIOS: SerialNumber
From Win32_ComputerSystemProduct: IdentifyingNumber and UUID
From Win32_Processor: ProcessorID



و برای گرفتن HardDrive SN از کدهای زیر:



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;}
}
}




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();
hdCollection.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)hdCollection[i];

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

++i;
}




// Display available hard drives
foreach(HardDrive hd in hdCollection)
{
Console.WriteLine("Model\t\t: " + hd.Model);
Console.WriteLine("Type\t\t: " + hd.Type);
Console.WriteLine("Serial No.\t: " + hd.SerialNo);
Console.WriteLine();
}


WMI رو مطالعه کنید و موفق باشید.

jome ramezani
دوشنبه 20 شهریور 1385, 06:44 صبح
خیلی ممنون ولی هنگام اجرای یکWindowsApplication آنها پیغام عدم شناخت فضای
using System.Management مدهد لطفا دوباره مرا راهنمایی کنید

ghafoori
دوشنبه 20 شهریور 1385, 07:38 صبح
دوست عزیز باید فضای System.Management را قسمت add refrence اضافه کنی در تب دات نت هست

jome ramezani
سه شنبه 21 شهریور 1385, 06:43 صبح
راجع به WMI تحقیق کنید دوست عزیز

لطفا اگه ممکنه یه مقاله فارسی راجع به wmi (لطفا فارسی) برایم لینک کنید

M.GhanaatPisheh
سه شنبه 21 شهریور 1385, 09:58 صبح
متاسفانه فرصت نوشتن ندارم.
اگر فرصت شد حتما می نویسم و می ذارم توی لیست تاپیک های مهم.
ِمتنهایی که بهتون معرفی کردم متن ساده و روانی دارند.

عفت بزرگه
سه شنبه 21 شهریور 1385, 16:57 عصر
دوستان مشگل اینه که این شماره سریالها روی انواع مختلف cpu درست کار نمی کنه .

afsar
چهارشنبه 22 شهریور 1385, 05:57 صبح
سلام
جناب M.GhanaatPisheh من از ManagementObjectSearcher استفاده کردم. ولی در ویندوز مدیا سنتر None برمیگردونه اما تویXP خوب جواب میده .چرا؟

M.GhanaatPisheh
چهارشنبه 22 شهریور 1385, 13:27 عصر
روی Platform های زیر باید بدون مشکل کار کنه دو ست عزیزم:


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

afsar
جمعه 24 شهریور 1385, 05:46 صبح
من روی سیستم دوستم که XP Media center هست Framework رو نصب کردم. بعد همون برنامه رو که روی ویندوز XP-SP2 خودم جواب میداد براش بردم ولی جواب نمی داد.
به نظر شما سیستمش چیزی کم داشته که جواب نمیداده؟

اینم برنامه مذکور هست:

afsar
جمعه 24 شهریور 1385, 05:47 صبح
من روی سیستم دوستم که XP Media center هست Framework رو نصب کردم. بعد همون برنامه رو که روی ویندوز XP-SP2 خودم جواب میداد براش بردم ولی جواب نداد.
به نظر شما سیستمش چیزی کم داشته که جواب نمیداده؟

اینم برنامه مذکور هست:

M.GhanaatPisheh
جمعه 24 شهریور 1385, 07:23 صبح
ُسورس کد رو بگذارید اینجا .

afsar
شنبه 25 شهریور 1385, 16:11 عصر
string hds = "";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

ManagementObjectCollection HardDiskCollection = searcher.Get();
foreach(ManagementObject wmi_HD in HardDiskCollection)
{
if( wmi_HD["SerialNumber"] != null )
{
hds = wmi_HD["SerialNumber"].ToString();
break;
}
}

Amir Oveisi
سه شنبه 28 شهریور 1385, 19:30 عصر
من روی سیستم دوستم که XP Media center هست Framework رو نصب کردم. بعد همون برنامه رو که روی ویندوز XP-SP2 خودم جواب میداد براش بردم ولی جواب نمی داد.
به نظر شما سیستمش چیزی کم داشته که جواب نمیداده؟

اینم برنامه مذکور هست:

من خودم رو media center تست کردم و 100% درست کار کرد

در ضمن خیلی ممنون از جناب قناعت پیشه واقعا لینکهای مفیدی بودن :بوس:

jome ramezani
چهارشنبه 29 شهریور 1385, 05:35 صبح
راستیتش م یه برنامه برای بنگاه نوشتم و می خواستم روش با کمک این کار روش قفل بذارم ولی این طور که معلومه نمی تونم با کمک این روش روی اون قفل بذارم (چون روی همه ویندوزها جواب نمیده) به هر حال خیلی ممنون

احمد سامعی
چهارشنبه 17 آبان 1385, 16:47 عصر
دوست عزیز مستقیم برید سراغ WMI و بعد از آشنایی از کلاسهای زیر برای گرفتن CPU SN استفاده کنید:


From Win32_BaseBoard: Tag, Manufacturer, Product and Version
From Win32_BIOS: SerialNumber
From Win32_ComputerSystemProduct: IdentifyingNumber and UUID
From Win32_Processor: ProcessorID


WMI رو مطالعه کنید و موفق باشید.

استاد دستورات شما برای هارد جواب می ده اما وقتی Win32_BIOS رو تو کد با کلاس Win32_DiskDrive عوض می کنی دیباگ می ده چیزی برای پیدا کردن نیست
آیا برای CPU کد مخصوص دیگه ای داره ( تو MSDN چیزی نبود )
( من CPU ID رو می خوام که برای هر کامپیوتری یکتا باشه )
پایدار باشید

Amir Oveisi
دوشنبه 22 آبان 1385, 14:42 عصر
واسه Proccessor ID :

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_Processor");

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

واسه سریال Hard :

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_LogicalDisk");

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

موفق باشید

jome ramezani
سه شنبه 23 آبان 1385, 03:53 صبح
ممنون دستان درد نکند

Mrs.Net
شنبه 21 مهر 1386, 23:55 عصر
ببخشید proccess ID بهتر هست یا سریال هارد؟
منظورم تو درجه اول یکتا بودنشون هست و در درجه دوم جواب دادن در ویندوزهای مختلف
ممنون

Amir Oveisi
سه شنبه 24 مهر 1386, 11:07 صبح
ترکیبی از هر دو بهترین حالت می تونه باشه
اینجوری با تعویض یکی از این قطعات هم مشکلی برای کاربر ژیش نمیاد و باز هم میتونه از سریال قبلی که داشته استفاده کنه

Mrs.Net
سه شنبه 24 مهر 1386, 11:36 صبح
ببخشید proccess ID بهتر هست یا سریال هارد؟
منظورم تو درجه اول یکتا بودنشون هست و در درجه دوم جواب دادن در ویندوزهای مختلف
ممنون
(آیا میشه دو هارد با یک شماره سریال داشت؟ شماره سریال هارد قابل تغییره؟)

Esmail Solhkhah
یک شنبه 17 آذر 1387, 01:35 صبح
دوستان سلام
راه دیگه ای بغیر از WMI هست ؟