获取计算机名:
BOOL GetComputerName( LPTSTR , // computer name LPDWORD // size of name buffer); lpBuffer:缓冲区 lpnSize:缓冲区大小输入,输出参数 说明Windows系统规定计算机名称最多15个字节,应此buffer长度可以为MAX_COMPUTERNAME_LENGTH + 1,这是一个宏 #define MAX_COMPUTERNAME_LENGTH 15。GetLastError()可获取失败原因, 调用失败返回0,成功返回非零。可以通过查看lpnSize的大小知道计算机名称长度。还有一种调用方法是传入lpBuffer为 NULL,则返回实际size,size已经包括'\0'.最后在重新分配空间,调用此函数。 在GetComputerName中尽力支持可选的计算机名称的更改已添加到gethostname。GetComputerName检查环境变量。如果存 在该变量,则GetComputerName返回其值而不是真实的计算机名称。进行更改以保持断开群集中的应用程序。 The change that was made in GetComputerName to support alternate computer names has been added to gethostname. 举例: 1: WCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1] = {0}; DWORD dwNameSize = MAX_COMPUTERNAME_LENGTH + 1; GetComputerName(szComputerName, &dwNameSize); 2: wstring getCompputerName() { DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; if (!GetComputerName(NULL, &dwSize)) { PWCHAR pName = new WCHAR[dwSize]; BOOL bRet = GetComputerName(pName, dwSize); if (!bRet) { delete []pName; return L""; } wstring strTempW = pName; delete []pName; return strTempW; } } 获取当前用户名: BOOL GetUserName( LPTSTR , // name buffer LPDWORD // size of name buffer); 参数说明: lpBuffer:缓冲区 nSize:输入输出参数, nSize应该足够大,不然会返回失败,调用GetLastError(),可查看错误原因为:“传递给系统调用的数据区域太小。” 成功时nSize返回写入缓冲区的字节大小,包括'\0'。失败时nSize返回需要的缓冲区大小。 调用方法同上,可举一例: WCHAR szUserName[MAX_PATH] = { 0 }; DWORD dwSize = MAX_PATH; GetUserName(szUserName, &dwSize); 更准确的获取当前用户名可以枚举exporer进程,再进一步获取当前用户名。 获取主机名称: int gethostname( char FAR *, int );Gethostname函数返回在网络名称资源而不是群集名称的节点名称。 The gethostname function returns the node name instead of the cluster name in the network name resource 说明:如果直接调用会返回失败,查看GetLastError()代码0x276d,发现错误信息为“应用程序没有调用 WSAStartup, 或者 WSAStartup 失败。”。所以应当先调用WSAStartup()函数,要调用此函数,必须#include,自然也就 的引入 #pragma comment (lib, "ws2_32.lib"),这样在进一步调用gethostname就不会出错了。最后调用完成后别忘了释放资源:WSACleanup() 例如: WSADATA wsaData; int nErr = WSAStartup(MAKEWORD(2,2), &wsaData);//调用成功返回0,失败返回非0 if(nErr) { nErr = GetLastError(); return ; } char szhostName[MAX_PATH] = { 0 }; int nRet = gethostname(szhostName, MAX_PATH); //int nErr = GetLastError();