Pergunta

Em um aplicativo C++ Windows (XP e NT, se isso fizer diferença) em que estou trabalhando, preciso obter o nome da rede associado ao computador em que o código está sendo executado, para poder converter nomes de arquivos locais de C:\ nome do arquivo.ext para \ ome_da_rede\C$ omedoarquivo.ext.Como eu faria isso?

Alternativamente, se houver uma função que faça apenas a conversão que descrevi, seria ainda melhor.Pesquisei WNetGetUniversalName, mas parece que não funciona com arquivos locais (unidade C).

Foi útil?

Solução

Você vai querer o GetComputerName do Win32:

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

Outras dicas

Existem mais de uma alternativa:

a.Use GetComputerName() do Win32 conforme sugerido por Stu.
Exemplo: http://www.techbytes.ca/techbyte97.html
OU
b.Use a função gethostname() no Winsock.Esta função é multiplataforma e pode ajudar se seu aplicativo for executado em outras plataformas além do Windows.
Referência MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
OU
c.Use a função getaddrinfo().
Referência MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

Concordo com Pascal em usar a função gethostname() do Winsock.Aqui você vai:

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

}

Se você quiser apenas o nome do computador local (NetBIOS), use GetComputerName função.Ele recupera apenas o nome do computador local estabelecido na inicialização do sistema, quando o sistema o lê no registro.

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

Mais sobre ObterNomeDoComputador

Se você deseja obter o nome do host DNS, o nome de domínio DNS ou o nome DNS totalmente qualificado, ligue para o GetComputerNameEx função.

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

Mais sobre ObterNomeDoComputadorEx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top