您的位置:首页 > 其它

MFC如何获取同一局域网中主机的IP地址

2012-04-04 22:05 615 查看
WNetEnumResource可以用来枚举。

BOOL WINAPI EnumerateFunc(HWND hwnd,

HDC hdc,

LPNETRESOURCE lpnr)

{

DWORD dwResult, dwResultEnum;

HANDLE hEnum;

DWORD cbBuffer = 16384; // 16K is a good size

DWORD cEntries = -1; // enumerate all possible entries

LPNETRESOURCE lpnrLocal; // pointer to enumerated structures

DWORD i;

//

// Call the WNetOpenEnum function to begin the enumeration.

//

dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources

RESOURCETYPE_ANY, // all resources

0, // enumerate all resources

lpnr, // NULL first time the function is called

&hEnum); // handle to the resource

if (dwResult != NO_ERROR)

{

//

// Process errors with an application-defined error handler.

//

NetErrorHandler(hwnd, dwResult, (LPSTR) "WNetOpenEnum ");

return FALSE;

}

//

// Call the GlobalAlloc function to allocate resources.

//

lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);

if (lpnrLocal == NULL)

return FALSE;

do

{

//

// Initialize the buffer.

//

ZeroMemory(lpnrLocal, cbBuffer);

//

// Call the WNetEnumResource function to continue

// the enumeration.

//

dwResultEnum = WNetEnumResource(hEnum, // resource handle

&cEntries, // defined locally as -1

lpnrLocal, // LPNETRESOURCE

&cbBuffer); // buffer size

//

// If the call succeeds, loop through the structures.

//

if (dwResultEnum == NO_ERROR)

{

for(i = 0; i < cEntries; i++)

{

// Call an application-defined function to

// display the contents of the NETRESOURCE structures.

//

DisplayStruct(hdc, &lpnrLocal[i]);

// If the NETRESOURCE structure represents a container resource,

// call the EnumerateFunc function recursively.

if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage

& RESOURCEUSAGE_CONTAINER))

if(!EnumerateFunc(hwnd, hdc, &lpnrLocal[i]))

TextOut(hdc, 10, 10, "EnumerateFunc returned FALSE. ", 29);

}

}

// Process errors.

//

else if (dwResultEnum != ERROR_NO_MORE_ITEMS)

{

NetErrorHandler(hwnd, dwResultEnum, (LPSTR) "WNetEnumResource ");

break;

}

}

//

// End do.

//

while(dwResultEnum != ERROR_NO_MORE_ITEMS);

//

// Call the GlobalFree function to free the memory.

//

GlobalFree((HGLOBAL)lpnrLocal);

//

// Call WNetCloseEnum to end the enumeration.

//

dwResult = WNetCloseEnum(hEnum);

if(dwResult != NO_ERROR)

{

//

// Process errors.

//

NetErrorHandler(hwnd, dwResult, (LPSTR) "WNetCloseEnum ");

return FALSE;

}

return TRUE;

}

当然也可以进行IP扫描,然后将IP地址转换为主机名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: