Войти

Показать полную графическую версию : Как снять характеристики с компа


lehha
12-12-2005, 11:12
Всем привет!!!
Подскажите как лутше снять основные характеристики железа, а именно
объем HDD, ОЗУ, тип процессора его частоту, MAC адрес, видео карта. К примеру тип проца можно выдрать из реестра по ветке HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\
Информацию о вичестере можа узнать с помощью функций
GetVolumeInformation
GetDiskFreeSpace - или чемто подобным
Одним словом каким образм это можно узнать, как и где лутше это посмотреть в реестре или еще гдето.
Лутше кончечно это сделать с помощью апи функций.
Спаибо за рание.

lehha
12-12-2005, 11:51
Итак покопавшись в MSDN нашел следующее
Computer System Hardware Classes - классы отвечающие за комп-е железо
вот ссылка на их описалово (локальный MSDN 2003) ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/wmisdk/wmi/computer_system_hardware_classes.htm#_hmm_networking_device_classes
а вот ссылка в инете (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/computer_system_hardware_classes.asp)
Спасибо всем если у кого то будут еще предложения пишите.

hasherfrog
12-12-2005, 11:51
Что-то можно собрать так:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/system_information_reference.asp

lehha
14-12-2005, 16:19
Если кого интересует как работают WMI классы вот пример кода который глядит имена cdrom - ов
#include "stdafx.h"
#define _WIN32_DCOM
#include <windows.h>
#include <vector>
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
#pragma comment( lib, "Wbemuuid.lib" )
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
IWbemClassObject * pObject = NULL;
IWbemServices * pService = NULL;
IWbemLocator * pLocator = NULL;
IEnumWbemClassObject * pEnum = NULL;
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_CONNECT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL, EOAC_NONE, 0);
hr = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_ALL,
IID_IWbemLocator, (void**) &pLocator);
if (FAILED(hr))
{
throw("Лажа не создано");
::CoUninitialize();
return -1;
}
hr = pLocator->ConnectServer( _bstr_t(L"root\\cimv2"),NULL,
NULL,NULL,NULL,NULL,NULL,&pService);
if (FAILED(hr))
{
throw("Лажа нет конеткта");
pLocator->Release();
::CoUninitialize();
return -1;
}
hr = pService->ExecQuery( _bstr_t(L"WQL"),
_bstr_t(L"SELECT * FROM Win32_CDROMDrive"),
WBEM_FLAG_RETURN_IMMEDIATELY |
WBEM_FLAG_FORWARD_ONLY,
0, &pEnum );
if (FAILED(hr))
{
throw("Лажа несработал запрос");
pService->Release();
pLocator->Release();
::CoUninitialize();
return -1;
}
ULONG uReturn = 0;
while (pEnum)
{
hr = pEnum->Next(WBEM_INFINITE, 1, &pObject, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
VariantInit(&vtProp);
hr = pObject->Get(L"Name", 0, &vtProp, 0, 0);
std::wcout << " Name : " << vtProp.bstrVal << std::endl;
VariantClear(&vtProp);
}
pLocator->Release();
::CoUninitialize();
return 0;
}

EvgeniyQQQ
22-10-2009, 11:58
Добрый, день.

Мне необходимо на С++ с помощью WinApi (желательно без использования WMI и NetBIOS) определить MAC-адрес физических сетевых карт на локальном компьютере. Как определить адреса всех карт - физических и виртуальных, я разобрался. А вот как отфильтровать, не знаю.

Пользуюсь функцией:

DWORD GetAdaptersInfo( __out PIP_ADAPTER_INFO pAdapterInfo, __inout PULONG pOutBufLen );


В структуре IP_ADAPTER_INFO, полей указывающих на то, что это физический адаптер или нет- не нашел.

Может кто сталкивался с подобной проблемой, подскажите пожалуйста)))




© OSzone.net 2001-2012