 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 16 Ene, 2023 5:36 pm Asunto: Saber la direccion MAC del PC |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 16 Ene, 2023 11:06 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|