2008-08-14 55 views
7

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

また、私が記述した変換を行う機能があれば、それはさらに優れています。私はWNetGetUniversalNameを調べましたが、ローカル(Cドライブ)ファイルでは動作しません。

+0

1程度

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

より。私のGoogleの結果は、スタックオーバーフローの投稿だった初めて。 ありがとうございます。 – theschmitzer

答えて

9

つ以上の選択肢があります。

。 Win32のGetComputerName()をStuの提案に従って使用してください。
例: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

+0

残念ながら、a)(techbytes.ca)のリンクはもう利用できないようです。 – lowglider

1

私は、winsockのgethostname()関数を使用している場合、パスカルに同意します。 は、ここに行く:

#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(); 

} 
0

あなたがローカルコンピュータ(のNetBIOS)の名前のみがGetComputerName機能を使いたい場合。システム起動時に設定されたローカルコンピュータ名のみが取得されます。システム名は、システムがレジストリから読み取るときに設定されます。 GetComputerName

について

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

もっとあなたはGetComputerNameEx関数を呼び出すDNSホスト名、DNSドメイン名、または完全修飾DNS名を取得したい場合。あなたにGetComputerNameEx

関連する問題