En C++/Windows, ¿cómo obtengo el nombre de red de la computadora en la que estoy?
-
08-06-2019 - |
Pregunta
En una aplicación C++ Windows (XP y NT, si hay alguna diferencia) en la que estoy trabajando, necesito obtener el nombre de la red asociada con la computadora en la que se ejecuta el código, para poder convertir nombres de archivos locales desde C:\ nombredearchivo.ext a \ ombre_de_red\C$ ombredearchivo.ext.¿Cómo haría esto?
Alternativamente, si hay una función que simplemente haga la conversión que describí, sería aún mejor.Miré WNetGetUniversalName, pero no parece funcionar con archivos locales (unidad C).
Solución
Querrás GetComputerName de Win32:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
Otros consejos
Hay más de una alternativa:
a.Utilice GetComputerName() de Win32 como lo sugiere Stu.
Ejemplo: http://www.techbytes.ca/techbyte97.html
O
b.Utilice la función gethostname() en Winsock.Esta función es multiplataforma y puede ayudar si su aplicación se va a ejecutar en otras plataformas además de Windows.
Referencia de MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
O
C.Utilice la función getaddrinfo().
Referencia de MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
Estoy de acuerdo con Pascal en el uso de la función gethostname() de winsock.Aquí tienes:
#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();
}
Si desea solo el nombre de la computadora local (NetBIOS), use GetComputerName
función.Recupera solo el nombre de la computadora local que se establece al iniciar el sistema, cuando el sistema lo lee del registro.
BOOL WINAPI GetComputerName(
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Más sobre Obtener nombre de computadora
Si desea obtener el nombre de host DNS, el nombre de dominio DNS o el nombre DNS completo, llame al GetComputerNameEx
función.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Más sobre Obtener nombre de computadora Ex