En C++/Windows, comment obtenir le nom de réseau de l'ordinateur sur lequel je me trouve ?
-
08-06-2019 - |
Question
Dans une application Windows C++ (XP et NT, si cela fait une différence) sur laquelle je travaille, j'ai besoin d'obtenir le nom de réseau associé à l'ordinateur sur lequel le code s'exécute, afin de pouvoir convertir les noms de fichiers locaux à partir de C:\ filename.ext vers \ etwork_name\C$\filename.ext.Comment pourrais-je faire ça ?
Alternativement, s'il existe une fonction qui effectue simplement la conversion que j'ai décrite, ce serait encore mieux.J'ai examiné WNetGetUniversalName, mais cela ne semble pas fonctionner avec les fichiers locaux (lecteur C).
La solution
Vous aurez besoin du GetComputerName de Win32 :
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
Autres conseils
Il existe plusieurs alternatives :
un.Utilisez GetComputerName() de Win32 comme suggéré par Stu.
Exemple: http://www.techbytes.ca/techbyte97.html
OU
b.Utilisez la fonction gethostname() sous Winsock.Cette fonction est multiplateforme et peut être utile si votre application doit être exécutée sur d'autres plates-formes que Windows.
Référence MSDN : http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
OU
c.Utilisez la fonction getaddrinfo().
Référence MSDN : http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
Je suis d'accord avec Pascal sur l'utilisation de la fonction gethostname() de Winsock.Voici:
#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 vous souhaitez uniquement le nom de l'ordinateur local (NetBIOS), utilisez GetComputerName
fonction.Il récupère uniquement le nom de l'ordinateur local établi au démarrage du système, lorsque le système le lit dans le registre.
BOOL WINAPI GetComputerName(
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Plus à propos ObtenirNomOrdinateur
Si vous souhaitez obtenir le nom d'hôte DNS, le nom de domaine DNS ou le nom DNS complet, appelez le GetComputerNameEx
fonction.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Plus à propos ObtenirNomOrdinateurEx