C++/Windows で、使用しているコンピュータのネットワーク名を取得するにはどうすればよいですか?

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

質問

私が取り組んでいる C++ Windows (XP と NT) アプリケーションでは、C:\ からローカル ファイル名を変換できるように、コードが実行されているコンピューターに関連付けられたネットワーク名を取得する必要があります。 filename.ext から \ etwork_name\C$\filename.ext へ。どうすればいいでしょうか?

あるいは、私が説明した変換だけを行う関数があれば、それはさらに良いでしょう。WNetGetUniversalName を調べましたが、ローカル (C ドライブ) ファイルでは機能しないようです。

役に立ちましたか?

解決

Win32 の GetComputerName が必要になります。

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

他のヒント

複数の選択肢があります。

a.Stu が提案したように、Win32 の GetComputerName() を使用します。
例: http://www.techbytes.ca/techbyte97.html
または
b.Winsock で関数 gethostname() を使用します。この関数はクロスプラットフォームであり、アプリが Windows 以外の他のプラットフォームで実行される場合に役立つ可能性があります。
MSDN リファレンス: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
または
c.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
);

さらに詳しく Getコンピュータ名Ex

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top