在我正在使用的C++ Windows(XP和NT,如果它有所不同)應用程序中,我需要獲取與正在執行代碼的計算機關聯的網絡名稱,以便我可以將本地文件名從C :\ filename.ext爲\\ network_name \ C $ \ filename.ext。我將如何做到這一點?在C++/Windows中,我如何獲取正在使用的計算機的網絡名稱?
或者,如果有一個函數可以完成我描述的轉換,那會更好。我查看了WNetGetUniversalName,但這似乎不適用於本地(C盤)文件。
在我正在使用的C++ Windows(XP和NT,如果它有所不同)應用程序中,我需要獲取與正在執行代碼的計算機關聯的網絡名稱,以便我可以將本地文件名從C :\ filename.ext爲\\ network_name \ C $ \ filename.ext。我將如何做到這一點?在C++/Windows中,我如何獲取正在使用的計算機的網絡名稱?
或者,如果有一個函數可以完成我描述的轉換,那會更好。我查看了WNetGetUniversalName,但這似乎不適用於本地(C盤)文件。
你會想的Win32的GetComputerName:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
有多個備選方案:
一個。按照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
不幸的是,a)(techbytes.ca)的鏈接似乎不再可用。 – lowglider 2013-03-13 10:34:27
我同意帕斯卡使用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();
}
如果你想在本地計算機的只有名稱(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
);
+1你。第一次我的谷歌結果是堆棧溢出帖子。 謝謝大家。 – theschmitzer 2008-12-08 20:17:58