C++/Windows에서 현재 사용 중인 컴퓨터의 네트워크 이름을 어떻게 알 수 있나요?

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

문제

작업 중인 C++ Windows(XP 및 NT, 차이가 있는 경우) 응용 프로그램에서는 C:\에서 로컬 파일 이름을 변환할 수 있도록 코드가 실행되는 컴퓨터와 연결된 네트워크 이름을 가져와야 합니다. 파일 이름.ext를 \ etwork_name\C$\filename.ext로 변경합니다.어떻게 해야 할까요?

또는 제가 설명한 변환만 수행하는 함수가 있다면 훨씬 더 좋을 것입니다.WNetGetUniversalName을 살펴봤지만 로컬(C 드라이브) 파일에서는 작동하지 않는 것 같습니다.

도움이 되었습니까?

해결책

Win32의 GetComputerName이 필요합니다.

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

다른 팁

하나 이상의 대안이 있습니다:

ㅏ.Stu가 제안한 대로 Win32의 GetComputerName()을 사용하십시오.
예: http://www.techbytes.ca/techbyte97.html
또는
비.Winsock에서 gethostname() 함수를 사용하십시오.이 기능은 크로스 플랫폼이며 앱이 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

나는 Winsock의 gethostname() 함수 사용에 대해 Pascal의 의견에 동의합니다.여기 있습니다:

#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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top