在C ++ / Windows中,如何获取我所在计算机的网络名称?

时间:2008-08-14 14:37:27

标签: c++ windows-xp networking windows-nt

在我正在研究的C ++ Windows(XP和NT,如果它有所作为)应用程序中,我需要获取与执行代码的计算机相关联的网络名称,以便我可以转换本地文件名C:\ filename.ext到\\ network_name \ C $ \ filename.ext。我该怎么做?

或者,如果有一个函数只会进行我所描述的转换,那就更好了。我查看了WNetGetUniversalName,但这似乎不适用于本地(C盘)文件。

4 个答案:

答案 0 :(得分:9)

有多种选择:

一个。按照Stu的建议使用Win32的GetComputerName()。
示例:http://www.techbytes.ca/techbyte97.html

湾使用Winsock下的函数gethostname()。此功能是跨平台的,如果您的应用程序将在除Windows之外的其他平台上运行,则可能会有所帮助。
MSDN参考:http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx

C。使用函数getaddrinfo()。
MSDN参考:http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

答案 1 :(得分:7)

答案 2 :(得分:1)

我同意Pascal使用winsock的gethostname()函数。 你走了:

#include <winsock2.h> //of course this is the way to go on windows only

#pragma comment(lib, "Ws2_32.lib")

void GetHostName(std::string& host_name)
{
    WSAData wsa_data;
    int ret_code;

    char buf[MAX_PATH];

    WSAStartup(MAKEWORD(1, 1), &wsa_data);
    ret_code = gethostname(buf, MAX_PATH);

    if (ret_code == SOCKET_ERROR)
        host_name = "unknown";
    else
        host_name = buf;


    WSACleanup();

}

答案 3 :(得分:1)

如果只想使用本地计算机(NetBIOS)的名称,请使用GetComputerName功能。它只检索系统启动时建立的本地计算机名称,系统从注册表中读取它。

BOOL WINAPI GetComputerName(
  _Out_   LPTSTR  lpBuffer,
 _Inout_ LPDWORD lpnSize
);

有关GetComputerName

的更多信息

如果要获取DNS主机名,DNS域名或完全限定的DNS名称,请调用GetComputerNameEx函数。

BOOL WINAPI GetComputerNameEx(
  _In_    COMPUTER_NAME_FORMAT NameType,
  _Out_   LPTSTR               lpBuffer,
  _Inout_ LPDWORD              lpnSize
);

有关GetComputerNameEx

的更多信息