Red de conocimiento informático - Espacio del host - Quiero escribir un programa usando VB6 o VC para leer el voltaje, la corriente, la temperatura y la capacidad de la batería de una computadora portátil.

Quiero escribir un programa usando VB6 o VC para leer el voltaje, la corriente, la temperatura y la capacidad de la batería de una computadora portátil.

Win32_Battery

HRESULT hr;

//1.Initialize COM

hr = CoInitializeEx(0, COINIT_MULTITHREADED); //inicializar COM

// 2. Inicialice la seguridad del proceso COM

hr = CoInitializeSecurity(

NULL, // Descriptor de seguridad

-1, // Negociación COM Servicio de autenticación

NULL, // Servicio de autenticación

NULL, // Reservado

RPC_C_AUTHN_LEVEL_DEFAULT, // El nivel de autenticación predeterminado del servidor proxy

RPC_C_IMP_LEVEL_IMPERSONATE, // Nivel de suplantación predeterminado del servidor proxy

NULL, // Información de autenticación

EOAC_NONE, // Capacidades adicionales del cliente o servidor

NULL); // Reservado

/3. Obtenga el localizador inicial de WMI.

//Inicialice la interfaz IWbemLocator

IWbemLocator *pLoc = 0

hr = CoCreateInstance(CLSID_WbemLocator, 0,

CLSCTX_ INPROC_SERVER, IID_IWbemLocator, (LPVOID *) & pLoc);

///4 Obtenga un puntero a IWbemServices en el espacio de nombres root\cimv2 en la computadora local llamando a IWbemLocator::ConnectServer. .

IWbemServices *pSvc = 0;

// Conéctese al espacio de nombres raíz\predeterminado utilizando el usuario actual. pSvc // Proxy de IWbemServices

);

cout lt;lt; "Conectado a WMI" lt;lt;

/5. proxy Configure la seguridad del proxy de IWbemServices para que los servicios WMI puedan suplantar al cliente llamando a CoSetProxyBlanket.

hr = CoSetProxyBlanket(pSvc, // Indica el proxy a configurar

RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx

RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx

NULL,

RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx

RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_ IMP_LEVEL_xxx

NULL, // Identidad del cliente

EOAC_NONE );//Capacidades de proxy

//6. Utilice el puntero IWbemServices para realizar una solicitud a WMI.

IEnumWbemClassObject* pEnumerator = NULL;

hr = pSvc-gt; ExecQuery(

bstr_t("WQL"),

bstr_t ("SELECT * FROM Win32_Battery"),

WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,

NULL,

amp;pEnumerator); FAILED( hr))

{

cout lt;lt; "Error en la consulta de procesos."

lt; "Código de error = 0x"

lt; lt hexadecimal; hr lt; lt;

pSvc-gt; );

CoUninitialize();

return 1; // El programa falló.

}

else

{

IWbemClassObject *pclsObj

ULONG uReturn = 0

ULONG i = 0;

mientras (pEnumerator)

{

hr = pEnumerator- gt; Next(WBEM_INFINITE, 1,

amp;pclsObj, amp;uReturn);

if(0 == uReturn)

{

printf("end\n") ;

romper;

}

VARIANT vtProp;

BSTR lp; //LPCWSTR

if( Strname[i][0] == "cadena")

{

lp = (BSTR)Strname[i][1].c_str();

// Obtener el valor del atributo Nombre

hr = pclsObj-gt Get(lp, 0, amp; vtProp, 0, 0);

printf(Strname[ i] [1].c_str());

wcout lt;lt; " : " lt;vtProp.bstrVal lt;endl;

VariantClear(amp; vtProp) ;

}

else

{

printf(Strname[i][ 1].c_str());

printf(":desconocido\n");

}

i;

}

}

}

}

// Limpieza

// ========

pSvc -gt ;Liberar();

pLoc-gt;Liberar();