Página 1 de 1

Clase Tmac

Publicado: Mié Oct 17, 2007 10:50 pm
por ssi-quita-esto
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

Clase Tmac

Publicado: Jue Nov 01, 2007 9:50 pm
por xAvi
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

Publicado: Jue Nov 01, 2007 11:59 pm
por miguel-esto-sob
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

Clase Tmac

Publicado: Vie Nov 02, 2007 5:38 am
por xAvi
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

Publicado: Vie Nov 02, 2007 2:02 pm
por Jose Lopez Carrasco
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

Publicado: Vie Nov 02, 2007 6:39 pm
por xAvi
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
//---------------------------------------------------------- --------------------
--

Clase Tmac

Publicado: Sab Nov 03, 2007 10:57 am
por miguel-esto-sob
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

Clase Tmac

Publicado: Sab Nov 03, 2007 2:42 pm
por xAvi
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

Clase Tmac

Publicado: Lun Nov 12, 2007 4:26 pm
por notengo
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

Clase Tmac

Publicado: Lun Nov 12, 2007 6:19 pm
por xAvi
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

Clase Tmac

Publicado: Lun Nov 12, 2007 8:13 pm
por notengo
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