En C++/Windows, comment obtenir le nom de réseau de l'ordinateur sur lequel je me trouve ?

StackOverflow https://stackoverflow.com/questions/11127

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).

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top