PDA

Ver la Versión Completa : Obtener información de hardware a través de API's de Windows (no componentes)


n3mohack
06-09-2006, 17:50:18
Hola estimados,
¿Cuales son las api de windows que proveen acceso a la información del hardware?. Me refiero en tiempo real (no ir a mirar el registro).
Necesito conocer las apis específicas de win y una referencia a sus interfaces, ya que no necesariamente es para acceder desde delphi, puede ser también de .Net, por lo tanto componentes para delphi no me sirven en este caso.

Gracias por sus comentarios!.

OSKR
06-09-2006, 18:29:37
mira esto http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/setupdigetclassdevs.asp en donde el ejemplo es este:

MSDN:


#include <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <devguid.h>
#include <regstr.h>

int main( int argc, char *argv[ ], char *envp[ ] )
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;

// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs(NULL,
0, // Enumerator
0,
DIGCF_PRESENT | DIGCF_ALLCLASSES );

if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return 1;
}

// Enumerate through all devices in Set.

DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
&DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;

//
// Call function with null to begin with,
// then use the returned buffer size
// to Alloc the buffer. Keep calling until
// success or an unknown failure.
//
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
}

printf("Device: %s\n",buffer);

if (buffer) LocalFree(buffer);
}

if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return 1;
}

// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);

return 0;
}

agil
08-10-2010, 10:19:27
Buenas,
yo también tenía la necesidad de saber las APIs que proporcionaba windows para obtener información de los dispositivos conectados al equipo, y era necesario No hacerlo a través del registro de windows, por lo que el enlace me ha venido de lujo, ahora bien...

Esto solo sirve para versiones de windows igual o superiores a windows 2000, mi problema es que también necesito hacerlo en un Windows NT, he estado rebuscando y no he encontrado mucha información sobre el tema, si alguien sabe algo se lo agradecería.
Gracias y Saludos.

Neftali [Germán.Estévez]
11-10-2010, 12:08:51
Se pueden usar las clases de WMI específicas para el Hardware (http://msdn.microsoft.com/en-us/library/aa389273%28VS.85%29.aspx) de la máquina. Se puede acceder a WMI desde los diferentes lenguajes y debería funcionar en todas las versiones de Windows.

juanelo
11-10-2010, 18:19:54
Se pueden usar las clases de WMI específicas para el Hardware (http://msdn.microsoft.com/en-us/library/aa389273%28VS.85%29.aspx) de la máquina. Se puede acceder a WMI desde los diferentes lenguajes y debería funcionar en todas las versiones de Windows.
Tengo serias dudas de que funcione en los sistemas a 64 bits.

Neftali [Germán.Estévez]
11-10-2010, 18:33:50
WMI es una cosa que mejora a medida que los sistema Windows avanzan. Es decir, en W95/W98 había que instalar un "añadido" para que funcionase, en W2000 y XP funciona bien y en Vista y Seven, no sólo funciona bein, sino que se obtienen más propiedades que en sus antecesores, ya que cada vez MS añade más clases y completa las ya existentes. De ahi que me extrañe que deje de funcionar en 64b puesto que sería lo opuesto a la dirección que MS lleva con WMI.

Mirando un poco la web (http://msdn.microsoft.com/en-us/library/aa390789%28VS.85%29.aspx), no parece que existan más problemas para acceder en 64b que en 32b.

Providing WMI Data on a 64-bit platform (http://msdn.microsoft.com/en-us/library/aa392895%28VS.85%29.aspx)
Requesting WMI Data on a 64-bit Platform (http://msdn.microsoft.com/en-us/library/aa393067%28VS.85%29.aspx)

juanelo
11-10-2010, 18:36:10
Mi comentario es porque todas las funciones al menos en nombre llevan el prefijo "32".
Saludos.

agil
15-10-2010, 13:21:12
Al parecer puede que funcione con Windows NT4 siempre que tenga instalado el Service Pack 4 o superior, ahora mismo estoy haciendo pruebas y tengo otro tipo de problemas ...
gracias por los comentarios