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

时间:2020-03-05 18:39:39  来源:igfitidea点击:

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

另外,如果有一个函数可以执行我描述的转换,那就更好了。我调查了WNetGetUniversalName,但似乎不适用于本地(C驱动器)文件。

解决方案

回答

我们将需要Win32的GetComputerName:

http://msdn.microsoft.com/zh-CN/library/ms724295(VS.85).aspx

回答

有多种选择:

一种。使用Stu建议的Win32的GetComputerName()。
示例:http://www.techbytes.ca/techbyte97.html
或者
b。使用Winsock下的函数gethostname()。此功能是跨平台的,如果应用程序要在Windows以外的其他平台上运行,则可能会有所帮助。
MSDN参考:http://msdn.microsoft.com/zh-cn/library/ms738527(VS.85).aspx
或者
C。使用函数getaddrinfo()。
MSDN参考:http://msdn.microsoft.com/zh-cn/library/ms738520(VS.85).aspx

回答

我同意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();

}