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

8
在我正在开发的C++ Windows应用程序中(如果有区别,是XP和NT),我需要获取与计算机关联的网络名称,以便将本地文件名从C:\filename.ext转换为\\network_name\C$\filename.ext。我该怎么做呢?
或者,如果有一个函数可以执行我描述的转换,那就更好了。我研究了WNetGetUniversalName,但它似乎无法处理本地(C驱动器)文件。
4个回答

9

很遗憾,a)(techbytes.ca)的链接似乎不再可用。 - lowglider

7

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 的信息


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();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接