In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Clase Tmac
-
- Mensajes: 109
- Registrado: Mié Dic 05, 2007 9:51 am
Clase Tmac
Jose Lalin o Alguien podria poner la clase TMAC para leler la Mac de la
tarjeta de red para la nueva Versión?
Con la nueva versión he tenido que quitarla.
Gracias
Podrias volv
tarjeta de red para la nueva Versión?
Con la nueva versión he tenido que quitarla.
Gracias
Podrias volv
Clase Tmac
Paco V. escribió:
> Jose Lalin o Alguien podria poner la clase TMAC para leler la Mac de la
> tarjeta de red para la nueva Versión?
>
> Con la nueva versión he tenido que quitarla.
>
> Gracias
>
> Podrias volv
>
>
Nada, como me sigo aburriendo, ver post "Re: Nuevo comportamiento del IDE".
Me ha dado por adaptar la función del API GetAdaptersInfo() para conseguir algo similar a al comando "IPConfig /All".
Espero que os sirva, se debe incluir en el proyecto la Lib del C Iphlpapi.LIB adjunto ejemplo.
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) != ERROR_SUCCESS ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
}
#pragma ENDDUMP
Un saludo
Xavi
--
> Jose Lalin o Alguien podria poner la clase TMAC para leler la Mac de la
> tarjeta de red para la nueva Versión?
>
> Con la nueva versión he tenido que quitarla.
>
> Gracias
>
> Podrias volv
>
>
Nada, como me sigo aburriendo, ver post "Re: Nuevo comportamiento del IDE".
Me ha dado por adaptar la función del API GetAdaptersInfo() para conseguir algo similar a al comando "IPConfig /All".
Espero que os sirva, se debe incluir en el proyecto la Lib del C Iphlpapi.LIB adjunto ejemplo.
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) != ERROR_SUCCESS ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
}
#pragma ENDDUMP
Un saludo
Xavi
--
-
- Mensajes: 43
- Registrado: Mar Sep 18, 2007 4:55 pm
Clase Tmac
Hola xAvi
He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
devuelve un array vacio.
Saludos. Miguel A. Torrellas
xAvi escribió:
> Paco V. escribió:
>> Jose Lalin o Alguien podria poner la clase TMAC para leler la Mac de
>> la tarjeta de red para la nueva Versión?
>>
>> Con la nueva versión he tenido que quitarla.
>>
>> Gracias
>>
>> Podrias volv
>>
>
> Nada, como me sigo aburriendo, ver post "Re: Nuevo comportamiento del IDE".
> Me ha dado por adaptar la función del API GetAdaptersInfo() para
> conseguir algo similar a al comando "IPConfig /All".
> Espero que os sirva, se debe incluir en el proyecto la Lib del C
> Iphlpapi.LIB adjunto ejemplo.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
>
> /*********************************************************** **********
> * CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) != ERROR_SUCCESS ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
>
> if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) == NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Token Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Unknown type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ),
> szFrtMAC, 3 * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
devuelve un array vacio.
Saludos. Miguel A. Torrellas
xAvi escribió:
> Paco V. escribió:
>> Jose Lalin o Alguien podria poner la clase TMAC para leler la Mac de
>> la tarjeta de red para la nueva Versión?
>>
>> Con la nueva versión he tenido que quitarla.
>>
>> Gracias
>>
>> Podrias volv
>>
>
> Nada, como me sigo aburriendo, ver post "Re: Nuevo comportamiento del IDE".
> Me ha dado por adaptar la función del API GetAdaptersInfo() para
> conseguir algo similar a al comando "IPConfig /All".
> Espero que os sirva, se debe incluir en el proyecto la Lib del C
> Iphlpapi.LIB adjunto ejemplo.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
>
> /*********************************************************** **********
> * CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) != ERROR_SUCCESS ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
>
> if( GetAdaptersInfo( pAdapterInfo, &ulOutBufLen ) == NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Token Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Unknown type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ),
> szFrtMAC, 3 * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
Clase Tmac
Miguel A. Torrellas escribió:
> Hola xAvi
>
> He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
> devuelve un array vacio.
>
Miguel,
GRACIAS!!! por probarlo.
Bueno ya está corregido, ya dirás si te funciona o presenta error.
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
#include "hbapierr.h"
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
DWORD dwRetVal;
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == ERROR_BUFFER_OVERFLOW ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
dwRetVal = ERROR_SUCCESS;
}
if( dwRetVal == ERROR_SUCCESS &&
(dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
if( dwRetVal != NO_ERROR ){
char szErrorMsg[64];
sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d", dwRetVal );
hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
}
}
#pragma ENDDUMP
Un saludo
Xavi
--
> Hola xAvi
>
> He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
> devuelve un array vacio.
>
Miguel,
GRACIAS!!! por probarlo.
Bueno ya está corregido, ya dirás si te funciona o presenta error.
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
#include "hbapierr.h"
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
DWORD dwRetVal;
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == ERROR_BUFFER_OVERFLOW ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
dwRetVal = ERROR_SUCCESS;
}
if( dwRetVal == ERROR_SUCCESS &&
(dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
if( dwRetVal != NO_ERROR ){
char szErrorMsg[64];
sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d", dwRetVal );
hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
}
}
#pragma ENDDUMP
Un saludo
Xavi
--
-
- Mensajes: 215
- Registrado: Lun Oct 20, 2008 11:38 pm
Clase Tmac
xAvi,
Ahora es correcto.
Gracias por tu aportacion.
Pepe. :})
"xAvi" <jarabal_eliminar_no_spam_@gmail.com> escribió en el mensaje
news:[email=472aa9ad@ozsrv2.ozlan.local...]472aa9ad@ozsrv2.ozlan.local...[/email]
> Miguel A. Torrellas escribió:
>> Hola xAvi
>>
>> He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
>> devuelve un array vacio.
>>
>
> Miguel,
> GRACIAS!!! por probarlo.
> Bueno ya está corregido, ya dirás si te funciona o presenta error.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIÓN! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
> #include "hbapierr.h"
>
> /*********************************************************** **********
> * CAPTURA INFORMACIÓN DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> DWORD dwRetVal;
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> ERROR_BUFFER_OVERFLOW ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
> dwRetVal = ERROR_SUCCESS;
> }
> if( dwRetVal == ERROR_SUCCESS &&
> (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token
> Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown
> type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3
> * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> if( dwRetVal != NO_ERROR ){
> char szErrorMsg[64];
> sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d",
> dwRetVal );
> hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
> }
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
>
Ahora es correcto.
Gracias por tu aportacion.
Pepe. :})
"xAvi" <jarabal_eliminar_no_spam_@gmail.com> escribió en el mensaje
news:[email=472aa9ad@ozsrv2.ozlan.local...]472aa9ad@ozsrv2.ozlan.local...[/email]
> Miguel A. Torrellas escribió:
>> Hola xAvi
>>
>> He probado tu ejemplo y el memo queda en blanco porque GetAdaptersInfo()
>> devuelve un array vacio.
>>
>
> Miguel,
> GRACIAS!!! por probarlo.
> Bueno ya está corregido, ya dirás si te funciona o presenta error.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIÓN! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
> #include "hbapierr.h"
>
> /*********************************************************** **********
> * CAPTURA INFORMACIÓN DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> DWORD dwRetVal;
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> ERROR_BUFFER_OVERFLOW ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
> dwRetVal = ERROR_SUCCESS;
> }
> if( dwRetVal == ERROR_SUCCESS &&
> (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token
> Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown
> type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3
> * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> if( dwRetVal != NO_ERROR ){
> char szErrorMsg[64];
> sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d",
> dwRetVal );
> hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
> }
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
>
Clase Tmac
GRACIAS a vosotros por probarlo y responder.
A veces uno piensa que ésto es como en el chiste: "... hay alguien más?".
Bueno yo le añadiría.-
...
if( dwRetVal != NO_ERROR && dwRetVal != ERROR_NO_DATA ){
...
Prefiero que me devuelva Array vacía si no hay adaptadores.
Un saludo
Xavi
PD: Qedaría así y que cada uno se lo cambie como quiera .-
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TIPConfigAll
Local aAdapter, aAdapters := GetAdaptersInfo()
::oMemo:Value := CRLF
for each aAdapter in aAdapters
::oMemo:Value += aAdapter[1] + ' ' + aAdapter[2] + CRLF
::oMemo:Value += "MAC Address ...... : " + aAdapter[3] + CRLF
::oMemo:Value += "Address ...... : " + aAdapter[4] + CRLF
::oMemo:Value += "Mask ...... : " + aAdapter[5] + CRLF
::oMemo:Value += "Gateway ...... : " + aAdapter[6] + CRLF
::oMemo:Value += CRLF
next
RETURN Nil
//---------------------------------------------------------- --------------------
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
#include "hbapierr.h"
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
DWORD dwRetVal;
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == ERROR_BUFFER_OVERFLOW ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
dwRetVal = ERROR_SUCCESS;
}
if( dwRetVal == ERROR_SUCCESS &&
(dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
if( dwRetVal != NO_ERROR && dwRetVal != ERROR_NO_DATA ){
char szErrorMsg[64];
sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d", dwRetVal );
hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
}
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
--
A veces uno piensa que ésto es como en el chiste: "... hay alguien más?".

Bueno yo le añadiría.-
...
if( dwRetVal != NO_ERROR && dwRetVal != ERROR_NO_DATA ){
...
Prefiero que me devuelva Array vacía si no hay adaptadores.
Un saludo
Xavi
PD: Qedaría así y que cada uno se lo cambie como quiera .-
//---------------------------------------------------------- --------------------
METHOD FormInitialize( oSender ) CLASS TIPConfigAll
Local aAdapter, aAdapters := GetAdaptersInfo()
::oMemo:Value := CRLF
for each aAdapter in aAdapters
::oMemo:Value += aAdapter[1] + ' ' + aAdapter[2] + CRLF
::oMemo:Value += "MAC Address ...... : " + aAdapter[3] + CRLF
::oMemo:Value += "Address ...... : " + aAdapter[4] + CRLF
::oMemo:Value += "Mask ...... : " + aAdapter[5] + CRLF
::oMemo:Value += "Gateway ...... : " + aAdapter[6] + CRLF
::oMemo:Value += CRLF
next
RETURN Nil
//---------------------------------------------------------- --------------------
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
// ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
// para Borland C/C++ en ruta por defecto .-
// Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
#include <Iphlpapi.h>
#include "hbapierr.h"
/*********************************************************** **********
* CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
* ------------------------------------------------------
* aAdapters := GetAdaptersInfo()
* aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
************************************************************ **********/
XA_FUNC( GETADAPTERSINFO )
{
DWORD dwRetVal;
ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab( sizeof(IP_ADAPTER_INFO) );
PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == ERROR_BUFFER_OVERFLOW ){
hb_xfree( pAdapterInfo );
pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
dwRetVal = ERROR_SUCCESS;
}
if( dwRetVal == ERROR_SUCCESS &&
(dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) == NO_ERROR ){
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
char acFrt[4], *szFrtMAC;
HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
while( pAdapter ){
hb_arrayNew( &ItmSubarray, 6 );
switch( pAdapter->Type ){
case MIB_IF_TYPE_OTHER:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
break;
case MIB_IF_TYPE_ETHERNET:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Ethernet" );
break;
case MIB_IF_TYPE_TOKENRING:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token Ring" );
break;
case MIB_IF_TYPE_FDDI:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
break;
case MIB_IF_TYPE_PPP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
break;
case MIB_IF_TYPE_LOOPBACK:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Lookback" );
break;
case MIB_IF_TYPE_SLIP:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
break;
default:
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown type" );
}
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ), pAdapter->Description );
szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
for( i = 0; i < pAdapter->AddressLength; i++ ){
sprintf( acFrt, "%02X-", pAdapter->Address );
strcpy( szFrtMAC + (3 * i), acFrt );
}
hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC, 3 * pAdapter->AddressLength - 1 );
hb_xfree( szFrtMAC );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ), pAdapter->IpAddressList.IpAddress.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ), pAdapter->IpAddressList.IpMask.String );
hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ), pAdapter->GatewayList.IpAddress.String );
hb_arrayAddForward( pItmArray, &ItmSubarray );
pAdapter = pAdapter->Next;
}
}
hb_xfree( pAdapterInfo );
hb_itemRelease( hb_itemReturnForward( pItmArray ) );
if( dwRetVal != NO_ERROR && dwRetVal != ERROR_NO_DATA ){
char szErrorMsg[64];
sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d", dwRetVal );
hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
}
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
--
-
- Mensajes: 43
- Registrado: Mar Sep 18, 2007 4:55 pm
Clase Tmac
Ahora SI. Gracias por tu trabajo, te aseguro que lo utilizare en mis
programas, siento no tener el nivel de conocimientos suficiente para
poder hacer aportaciones de este tipo, por tanto "me quito el sombrero"
ante todos los maestros que componen este foro.
Saludos. Miguel A. Torrellas
xAvi escribió:
> Miguel A. Torrellas escribió:
>> Hola xAvi
>>
>> He probado tu ejemplo y el memo queda en blanco porque
>> GetAdaptersInfo() devuelve un array vacio.
>>
>
> Miguel,
> GRACIAS!!! por probarlo.
> Bueno ya está corregido, ya dirás si te funciona o presenta error.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
> #include "hbapierr.h"
>
> /*********************************************************** **********
> * CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> DWORD dwRetVal;
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> ERROR_BUFFER_OVERFLOW ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
> dwRetVal = ERROR_SUCCESS;
> }
> if( dwRetVal == ERROR_SUCCESS &&
> (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token
> Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown
> type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC,
> 3 * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> if( dwRetVal != NO_ERROR ){
> char szErrorMsg[64];
> sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d",
> dwRetVal );
> hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
> }
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
programas, siento no tener el nivel de conocimientos suficiente para
poder hacer aportaciones de este tipo, por tanto "me quito el sombrero"
ante todos los maestros que componen este foro.
Saludos. Miguel A. Torrellas
xAvi escribió:
> Miguel A. Torrellas escribió:
>> Hola xAvi
>>
>> He probado tu ejemplo y el memo queda en blanco porque
>> GetAdaptersInfo() devuelve un array vacio.
>>
>
> Miguel,
> GRACIAS!!! por probarlo.
> Bueno ya está corregido, ya dirás si te funciona o presenta error.
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> // ¡ATENCIí“N! Compilar con Iphlpapi.LIB del C
> // para Borland C/C++ en ruta por defecto .-
> // Incluir en el proyecto C:BorlandBCC55LibPSDKIphlpapi.lib
> #include <Iphlpapi.h>
> #include "hbapierr.h"
>
> /*********************************************************** **********
> * CAPTURA INFORMACIí“N DE ADAPTADORES (IPConfig /All)
> * ------------------------------------------------------
> * aAdapters := GetAdaptersInfo()
> * aAdapters : { {cTipo, cNameDes, cMAC, cAddress, cMask, cGateway} }
> ************************************************************ **********/
> XA_FUNC( GETADAPTERSINFO )
> {
> DWORD dwRetVal;
> ULONG i, ulOutBufLen = sizeof(IP_ADAPTER_INFO);
> PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)hb_xgrab(
> sizeof(IP_ADAPTER_INFO) );
> PHB_ITEM pItmArray = hb_itemNew( NULL ); hb_arrayNew( pItmArray, 0 );
>
> if( (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> ERROR_BUFFER_OVERFLOW ){
> hb_xfree( pAdapterInfo );
> pAdapterInfo = (PIP_ADAPTER_INFO)hb_xgrab( ulOutBufLen );
> dwRetVal = ERROR_SUCCESS;
> }
> if( dwRetVal == ERROR_SUCCESS &&
> (dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen )) ==
> NO_ERROR ){
> PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
> char acFrt[4], *szFrtMAC;
> HB_ITEM ItmSubarray; ItmSubarray.type = HB_IT_NIL;
> while( pAdapter ){
> hb_arrayNew( &ItmSubarray, 6 );
> switch( pAdapter->Type ){
> case MIB_IF_TYPE_OTHER:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Other" );
> break;
> case MIB_IF_TYPE_ETHERNET:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Ethernet" );
> break;
> case MIB_IF_TYPE_TOKENRING:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Token
> Ring" );
> break;
> case MIB_IF_TYPE_FDDI:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "FDDI" );
> break;
> case MIB_IF_TYPE_PPP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "PPP" );
> break;
> case MIB_IF_TYPE_LOOPBACK:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ),
> "Lookback" );
> break;
> case MIB_IF_TYPE_SLIP:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Slip" );
> break;
> default:
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 1 ), "Unknown
> type" );
> }
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 2 ),
> pAdapter->Description );
> szFrtMAC = (char *)hb_xgrab( 3 * pAdapter->AddressLength + 1 );
> for( i = 0; i < pAdapter->AddressLength; i++ ){
> sprintf( acFrt, "%02X-", pAdapter->Address );
> strcpy( szFrtMAC + (3 * i), acFrt );
> }
> hb_itemPutCL( hb_arrayGetItemPtr( &ItmSubarray, 3 ), szFrtMAC,
> 3 * pAdapter->AddressLength - 1 );
> hb_xfree( szFrtMAC );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 4 ),
> pAdapter->IpAddressList.IpAddress.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 5 ),
> pAdapter->IpAddressList.IpMask.String );
> hb_itemPutC( hb_arrayGetItemPtr( &ItmSubarray, 6 ),
> pAdapter->GatewayList.IpAddress.String );
> hb_arrayAddForward( pItmArray, &ItmSubarray );
> pAdapter = pAdapter->Next;
> }
> }
> hb_xfree( pAdapterInfo );
> hb_itemRelease( hb_itemReturnForward( pItmArray ) );
> if( dwRetVal != NO_ERROR ){
> char szErrorMsg[64];
> sprintf( szErrorMsg, "GetAdaptersInfo failed with error: %d",
> dwRetVal );
> hb_errRT_BASE_SubstR( EG_ARG, 0, szErrorMsg, NULL, 0 );
> }
> }
>
> #pragma ENDDUMP
>
> Un saludo
> Xavi
Clase Tmac
Miguel A. Torrellas escribió:
> Ahora SI. Gracias por tu trabajo
>
Gracias pero ésto es información publica.-
http://msdn2.microsoft.com/en-us/library/aa365917.aspx
http://msdn2.microsoft.com/en-us/library/aa366062.aspx
Un saludo
Xavi
> Ahora SI. Gracias por tu trabajo
>
Gracias pero ésto es información publica.-
http://msdn2.microsoft.com/en-us/library/aa365917.aspx
http://msdn2.microsoft.com/en-us/library/aa366062.aspx
Un saludo
Xavi
Clase Tmac
xAvi,
en cuanto pueda voy a publicar una revisión de TMac con los fuentes. ¿ Te
parece si incluyo la función que has publicado para completarla un poco más ?
Saludos,
José Lalín
en cuanto pueda voy a publicar una revisión de TMac con los fuentes. ¿ Te
parece si incluyo la función que has publicado para completarla un poco más ?
Saludos,
José Lalín
Clase Tmac
José Lalín escribió:
> ¿ Te parece si incluyo la función que has publicado para completarla un
> poco más ?
>
Cap problema, como se dice por aquí: ningún problema.
Ya dije que era información publica y me limite a poner lo básico.
Gracias, un saludo.
Xavi
> ¿ Te parece si incluyo la función que has publicado para completarla un
> poco más ?
>
Cap problema, como se dice por aquí: ningún problema.
Ya dije que era información publica y me limite a poner lo básico.
Gracias, un saludo.
Xavi
Clase Tmac
xAvi,
> Cap problema, como se dice por aquí: ningún problema.
Muchas gracias.
> Ya dije que era información publica y me limite a poner lo básico.
Cierto, pero no me cuesta nada preguntar
Saludos,
José Lalín
> Cap problema, como se dice por aquí: ningún problema.
Muchas gracias.
> Ya dije que era información publica y me limite a poner lo básico.
Cierto, pero no me cuesta nada preguntar

Saludos,
José Lalín