Wie erhalte ich in C++/Windows den Netzwerknamen des Computers, auf dem ich mich befinde?
-
08-06-2019 - |
Frage
In einer C++-Windows-Anwendung (XP und NT, wenn es einen Unterschied macht), an der ich arbeite, muss ich den Netzwerknamen abrufen, der dem Computer zugeordnet ist, auf dem der Code ausgeführt wird, damit ich lokale Dateinamen von C:\ konvertieren kann. Dateiname.ext nach \ etzwerkname\C$\Dateiname.ext.Wie würde ich das machen?
Alternativ wäre es sogar noch besser, wenn es eine Funktion gäbe, die nur die von mir beschriebene Konvertierung durchführt.Ich habe mir WNetGetUniversalName angesehen, aber das scheint mit lokalen Dateien (Laufwerk C) nicht zu funktionieren.
Lösung
Sie benötigen GetComputerName von Win32:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
Andere Tipps
Es gibt mehr als eine Alternative:
A.Verwenden Sie GetComputerName() von Win32, wie von Stu vorgeschlagen.
Beispiel: http://www.techbytes.ca/techbyte97.html
ODER
B.Verwenden Sie unter Winsock die Funktion gethostname().Diese Funktion ist plattformübergreifend und kann hilfreich sein, wenn Ihre App auf anderen Plattformen als Windows ausgeführt werden soll.
MSDN-Referenz: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
ODER
C.Verwenden Sie die Funktion getaddrinfo().
MSDN-Referenz: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
Ich stimme Pascal darin zu, die Funktion gethostname() von Winsock zu verwenden.Bitte schön:
#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();
}
Wenn Sie möchten, verwenden Sie nur den Namen des lokalen Computers (NetBIOS). GetComputerName
Funktion.Es ruft nur den Namen des lokalen Computers ab, der beim Systemstart festgelegt wurde, wenn das System ihn aus der Registrierung liest.
BOOL WINAPI GetComputerName(
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Mehr über GetComputerName
Wenn Sie einen DNS-Hostnamen, einen DNS-Domänennamen oder den vollständig qualifizierten DNS-Namen erhalten möchten, rufen Sie an GetComputerNameEx
Funktion.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Mehr über GetComputerNameEx