You can use GetComputerName (or gethostname) and gethostbyname (see WINSOCK2.H) for this. Remember that a computer can have more than one IP address - it can have multiple adapters, or be supporting extra addresses for RAS purposes.
Bear in mind that this code uses Winsock functionality, so a successful call to WSAStartup is a pre-requisite.
HOSTENT* phe ;
char szCpuName [128] ;
DWORD dwSize = sizeof(szCpuName);
int iaddr, ifield;
UINT uField;
CString csIpAddr;
CString csAddrField;
if (GetComputerName (szCpuName, &dwSize) == 0)
{
wsprintf (szCpuName, "Can't get computer name, error %d",
GetLastError ());
AfxMessageBox (szCpuName);
}
else
{
phe = gethostbyname (szCpuName);
if (phe != NULL)
{
for (iaddr=0; phe->h_addr_list[iaddr] != NULL; iaddr++)
{
csIpAddr = "";
for (ifield=0;
ifield < phe->h_length;
ifield++)
{
if (ifield > 0)
csIpAddr += ".";
uField = ((BYTE*)phe->h_addr_list[iaddr])[ifield];
csAddrField.Format("%u", uField);
csIpAddr += csAddrField;
}
// Do what you want with the address here. I add it to a listbox.
m_ctrlListbox.AddString (csIpAddr);
}
}
}
Download