Сведения о вопросе

Htmlщик

01:01, 8th August, 2020

Теги

В C++/Windows как получить сетевое имя компьютера, на котором я работаю?

Просмотров: 801   Ответов: 4

В приложении C++ Windows (XP и NT, если это имеет значение), над которым я работаю, мне нужно получить сетевое имя, связанное с компьютером, на котором выполняется код, чтобы я мог конвертировать локальные имена файлов из C:\filename.ext в \\network_name\C$\filename.ext. Как бы я это сделал?

С другой стороны, если есть функция, которая просто сделает преобразование, которое я описал, это было бы еще лучше. Я заглянул в WNetGetUniversalName, но это, похоже, не работает с локальными файлами (C диск).



  Сведения об ответе

ЯЯ__4

21:06, 1st October, 2020

Есть более чем одна альтернатива:

a. используйте Win32-код GetComputerName(), как предлагает Stu.
Пример: http://www.techbytes.ca/techbyte97.html
OR
b. используйте функцию gethostname() в разделе Winsock. Эта функция является кроссплатформенной и может помочь, если ваше приложение будет работать на других платформах, кроме Windows.
MSDN ссылка: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
OR
c. Используйте функцию getaddrinfo().
MSDN ссылка: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx


  Сведения об ответе

DO__IT

13:00, 5th August, 2020

Вы будете хотеть Win32 GetComputerName:

http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx


  Сведения об ответе

9090

22:46, 18th August, 2020

Я согласен с Pascal в использовании функции 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();

}


  Сведения об ответе

nYU

04:51, 15th August, 2020

Если вам нужно только имя локального компьютера (NetBIOS), используйте функцию GetComputerName . Он восстанавливает только имя локального компьютера, которое устанавливается при запуске системы, когда система считывает его из реестра.

BOOL WINAPI GetComputerName(
  _Out_   LPTSTR  lpBuffer,
 _Inout_ LPDWORD lpnSize
);

Подробнее о GetComputerName

Если вы хотите получить имя узла DNS, доменное имя DNS или полное имя DNS, вызовите функцию GetComputerNameEx .

BOOL WINAPI GetComputerNameEx(
  _In_    COMPUTER_NAME_FORMAT NameType,
  _Out_   LPTSTR               lpBuffer,
  _Inout_ LPDWORD              lpnSize
);

Подробнее о GetComputerNameEx


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться