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

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

有帮助吗?

解决方案

您需要 Win32 的 GetComputerName:

http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx

其他提示

有不止一种选择:

A。按照 Stu 的建议使用 Win32 的 GetComputerName()。
例子: http://www.techbytes.ca/techbyte97.html
或者
b.使用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

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

}

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

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

更多关于 获取计算机名

如果您想获取 DNS 主机名、DNS 域名或完全限定的 DNS 名称,请调用 GetComputerNameEx 功能。

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

更多关于 获取计算机名Ex

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top