Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Obtener información de hardware a través de API's de Windows (no componentes) (https://www.clubdelphi.com/foros/showthread.php?t=35294)

n3mohack 06-09-2006 17:50:18

Obtener información de hardware a través de API's de Windows (no componentes)
 
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/de...tclassdevs.asp en donde el ejemplo es este:

MSDN:

Código:

#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

Y en Windows NT ??
 
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 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

Cita:

Empezado por Neftali (Mensaje 378963)
Se pueden usar las clases de WMI específicas para el Hardware 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, no parece que existan más problemas para acceder en 64b que en 32b.

Providing WMI Data on a 64-bit platform
Requesting WMI Data on a 64-bit Platform

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

Puede que con Windows NT4 y SP4 o > funcione
 
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


La franja horaria es GMT +2. Ahora son las 23:27:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi