Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Saber la direccion MAC del PC

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Saber la direccion MAC del PC Responder citando

Hola a todos,

Lo he sacado de chat.openai.com, me parece una herramienta increíble.

Si os fijáis he puesto como comentarios donde da errores, por que yo solo quiero que me de la MAC y sino la consigue me devuelve la cadena vacía.

El código seria el siguiente, espero que os ayude:

#include <Iphlpapi.h>
#include <winsock2.h>

#pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

AnsiString DimeLaMac(void)
{
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
AnsiString MACAddress;

ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
//printf("Error allocating memory needed to call GetAdaptersinfo\n");
return "";
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
if (pAdapterInfo == NULL) {
//printf("Error allocating memory needed to call GetAdaptersinfo\n");
return "";
}
}

if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
pAdapter = pAdapterInfo;
MACAddress.sprintf("%02X-%02X-%02X-%02X-%02X-%02X",
pAdapter->Address[0], pAdapter->Address[1],
pAdapter->Address[2], pAdapter->Address[3],
pAdapter->Address[4], pAdapter->Address[5]);
} else {
//printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
return "";
}
if (pAdapterInfo)
free(pAdapterInfo);

return MACAddress;
}
_________________
Carlos J. Fernandez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Aprovecho para aportar mi granito de arena. Es una APP usando solo la API que informa de el nombre de la máquina, la IP y la MAC todo ello con muy poco código.

Este es el código completo de toda la aplicación:

Código:

#include <windows.h>
#pragma hdrstop


//---------------------------------------------------------------------------
#include <Iphlpapi.h>
//#pragma comment(lib, "iphlpapi.lib")


typedef DWORD (__stdcall *PGetAdaptersInfo)(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);

void GetCurrentIP_MAC(char *Name, int SizeName, char *IP, int SizeIP, char *MAC, int SizeMAC)
{
  WSADATA Wsa;
  PIP_ADAPTER_INFO AI, pAI;
  ULONG AILen;

  // Encuentro el nombre del equipo
  if(WSAStartup(MAKEWORD(2,2),&Wsa) == 0 ){
    gethostname(Name, SizeName);
    WSACleanup();
  }

  PGetAdaptersInfo _GetAdaptersInfo = (PGetAdaptersInfo)GetProcAddress(LoadLibrary("iphlpapi.dll"), "GetAdaptersInfo");
  if(!_GetAdaptersInfo) return;
  _GetAdaptersInfo(0, &AILen);
  pAI = AI = (PIP_ADAPTER_INFO) new BYTE[AILen];

  // Encuentro la IP y la MAC

  if(!_GetAdaptersInfo(pAI, &AILen)){
    *MAC = 0;
    if(SizeMAC >= sizeof(IP_ADDRESS_STRING))
      wsprintf(MAC, "%.2X-%.2X-%.2X-%.2X-%.2X-%.2X", pAI->Address[0], pAI->Address[1], pAI->Address[2], pAI->Address[3], pAI->Address[4], pAI->Address[5]);
    lstrcpyn(IP, pAI->IpAddressList.IpAddress.String, sizeof(IP_ADDRESS_STRING));
  }
  delete [] AI;
}


#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  char Msg[255];
  char Name[255];
  char IP[20];
  char MAC[20];
  GetCurrentIP_MAC(Name, sizeof(Name), IP, 20, MAC, 20);
  wsprintf(Msg, "%s          \n\nIP:       %s    \nMAC: %s     ", Name, IP, MAC);
  MessageBox(0, Msg, "Current IP", MB_OK | MB_ICONINFORMATION);
  return 0;
}



Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.