PDA

View Full Version : سوال: به دست آوردن مشخصات سخت افزاری سیستم



s_savabi
شنبه 27 آذر 1389, 09:31 صبح
سلام دوستان
میخام برنامه ای بنویسم که روی هر سیستمی که اجرا میشه مشخصات سخت افزاری اون سیستم رو بهم بده
لطفا راهنماییم کنید که باید از چه کامپوننتها و دستوراتی استفاده کنم..
با تشکر

AliReza Vafakhah
شنبه 27 آذر 1389, 12:52 عصر
از کامپوننت Mitec System information (http://www.mitec.cz/) استفاده کنید

Felony
شنبه 27 آذر 1389, 21:45 عصر
میتونید از WMI استفاده کنید و با ارسال درخواست WQL به کلاس مورد نظر مشخصات سخت افزار مورد نظرتون رو از ویندوز درخواست کنید .

AliReza Vafakhah
یک شنبه 28 آذر 1389, 14:04 عصر
میتونید از WMI استفاده کنید و با ارسال درخواست WQL به کلاس مورد نظر مشخصات سخت افزار مورد نظرتون رو از ویندوز درخواست کنید .

آقای تاجیک میشه بشتر توضیح بدهید .ممنون

Felony
یک شنبه 28 آذر 1389, 15:42 عصر
آقای تاجیک میشه بشتر توضیح بدهید .ممنون

WMI (http://msdn.microsoft.com/en-us/library/aa394582(v=VS.85).aspx) مخفف عبارت Windows Management Instrumentation (http://msdn.microsoft.com/en-us/library/aa394582(v=VS.85).aspx) هست ، همونطور که از اسمش پیداست WMI ابزار مدیریت ویندوز هست که تحت کلاس های مختلفی در اختیار برنامه نویس قرار میگیره که کارهای مختلفی منجمله دریافت مشخصات سخت افزار ها رو میشه باهاش انجام داد .

برای دریافت مشخصات سخت افزار ها باید از کلاس های زیر مجموعه Computer System Hardware Classes (http://msdn.microsoft.com/en-us/library/aa389273(v=vs.85).aspx) استفاده کرد که در لینک های MSDN ی که قرار دادم نام هر کلاس + توضیحات و نحوه کار با اون شرح داده شده .

در یک برنامه بانک اطلاعاتی شما به وسیله دستورات TSQL از بانکتون درخواست تهیه گزارش و ... رو میکنید ، برای WMI هم همچین موردی صدق میکنه و برای گرفتن مشخصات و اطلاعات خاصی میتونید از دستورات SQL استفاده کنید که این دستورات در ویندوز WQL ( مخفف Windows Query Language ) شناخته میشن ، به عنوان مثال کد زیر که براتون نوشتم نام پردازنده رو بهتون میده :

function VarArrayToStr(const vArray: Variant): String;
function _VarToStr(const V: Variant): String;
var
Vt: integer;
begin
Vt:= VarType(V);
case Vt of
varSmallint,
varInteger : Result:= IntToStr(integer(V));
varSingle,
varDouble,
varCurrency : Result:= FloatToStr(Double(V));
varDate : Result:= VarToStr(V);
varOleStr : Result:= WideString(V);
varBoolean : Result:= VarToStr(V);
varVariant : Result:= VarToStr(Variant(V));
varByte : Result:= char(byte(V));
varString : Result:= String(V);
varArray : Result:= VarArrayToStr(Variant(V));
end;
end;
var
i : Integer;
begin
Result:= '[';
if (VarType(vArray) and VarArray)=0 then
Result:= _VarToStr(vArray)
else
for i:= VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
if i= VarArrayLowBound(vArray, 1) then
Result:= Result + _VarToStr(vArray[i])
else
Result:= Result+'|' + _VarToStr(vArray[i]);
Result:= Result+']';
end;

function VarStrNull(const V: OleVariant): String;
begin
Result:='';
if not VarIsNull(V) then
begin
if VarIsArray(V) then
Result:= VarArrayToStr(V)
else
Result:= VarToStr(V);
end;
end;

function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;

function ProcessorName: String;
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
objWMIService:= GetWMIObject('winmgmts:\\localhost\root\CIMV2');
colItems := objWMIService.ExecQuery('SELECT * FROM Win32_Processor','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
while oEnum.Next(1, colItem, iValue) = 0 do
begin
Result:= VarStrNull(colItem.Name);
end;
end;

کتابخانه های ActiveX ، ComObj و Variants رو به Uses اضافه کنید ، نحوه استفاده :

ShowMessage(ProcessorName);

موفق باشید .

تازه_کار
شنبه 13 اردیبهشت 1393, 03:58 صبح
با سلام
بسیار سپاس گزارم از مطلب مفیدی که گذاشته اید؛ اما من الان نیاز دارم به یک برنامه ای که مثل CPU-Z برام کار کنه؛ در نتیجه مشخصات تمام قطعات مورد نیازم هست.
چه راهنمایی می تونید کنید؟ در مورد WMI و کلاس هاش دارم کلی مطلب می خونم، اما هنوز نفهمیدم دقیقا کلاس ها رو چطوری استفاده کنم.
از کد شما به طور کلی ی چیزی دستگیرم شد، اما خیلی دقیق نه!!!

یک نکته: می خواهم بدونم شرکت سازنده RAM یا H.D.D و ... کدام شرکت است. اینو چطوری بفهمم؟

سپاس گزارم از حوصله ای که بخرج می دید و پاسخ به موقع و سریعی که می دید.

بی صبرانه و کمی با عجله منتظر پاسخ شما هستم.:قلب: