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

百科知识2025-04-272

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地址转换为主机名