Как в C++/Windows получить сетевое имя компьютера, на котором я нахожусь?
-
08-06-2019 - |
Вопрос
В приложении C++ Windows (XP и NT, если это имеет значение), над которым я работаю, мне нужно получить сетевое имя, связанное с компьютером, на котором выполняется код, чтобы я мог преобразовать локальные имена файлов из C:\. имя_файла.расширение в \\имя_сети\C$\имя_файла.расширение.Как бы я это сделал?
В качестве альтернативы, если бы существовала функция, которая просто выполняла бы описанное мной преобразование, это было бы еще лучше.Я просмотрел WNetGetUniversalName, но, похоже, это не работает с локальными файлами (диск C).
Решение
Вам понадобится GetComputerName Win32:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
Другие советы
Существует более одной альтернативы:
а.Используйте GetComputerName() Win32, как предложил Стю.
Пример: http://www.techbytes.ca/techbyte97.html
ИЛИ
б.Используйте функцию gethostname() в Winsock.Эта функция является кроссплатформенной и может помочь, если ваше приложение будет запускаться на других платформах, помимо Windows.
Ссылка MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
ИЛИ
в.Используйте функцию getaddrinfo().
Ссылка MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
Я согласен с Паскалем в использовании функции gethostname() Winsock.Ну вот:
#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();
}
Если вам нужно только имя локального компьютера (NetBIOS), используйте GetComputerName
функция.Он извлекает только имя локального компьютера, установленное при запуске системы, когда система считывает его из реестра.
BOOL WINAPI GetComputerName(
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Больше о Получитьимякомпьютера
Если вы хотите получить имя хоста DNS, имя домена DNS или полное имя DNS, позвоните по GetComputerNameEx
функция.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
Больше о GetComputerNameEx