C++/Windows で、使用しているコンピュータのネットワーク名を取得するにはどうすればよいですか?
-
08-06-2019 - |
質問
私が取り組んでいる 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