zoukankan      html  css  js  c++  java
  • 获取计算机以及本机信息API

    获取计算机名:

    BOOL GetComputerName(
      LPTSTR lpBuffer,  // computer name
      LPDWORD lpnSize   // 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已经包括''.最后在重新分配空间,调用此函数。

    在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 lpBuffer, // name buffer LPDWORD nSize // size of name buffer );
    参数说明:
    lpBuffer:缓冲区
    nSize:输入输出参数,
    nSize应该足够大,不然会返回失败,调用GetLastError(),可查看错误原因为:“传递给系统调用的数据区域太小。”
    成功时nSize返回写入缓冲区的字节大小,包括''。失败时nSize返回需要的缓冲区大小。
    调用方法同上,可举一例:
    WCHAR szUserName[MAX_PATH] = { 0 };
    DWORD dwSize = MAX_PATH;
    GetUserName(szUserName, &dwSize);
    更准确的获取当前用户名可以枚举exporer进程,再进一步获取当前用户名。

    获取主机名称:
    int gethostname( char FAR *name, int namelen );Gethostname函数返回在网络名称资源而不是群集名称的节点名称。
    The gethostname function returns the node name instead of the cluster name in the network name resource
    说明:如果直接调用会返回失败,查看GetLastError()代码0x276d,发现错误信息为“应用程序没有调用 WSAStartup,
    或者 WSAStartup 失败。”。所以应当先调用WSAStartup()函数,要调用此函数,必须#include <WinSock2.h>,自然也就
    的引入 #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();
  • 相关阅读:
    usb mtp激活流程【转】
    [RK3288][Android6.0] USB OTG模式及切换【转】
    简单实用的磁带转MP3方法图解
    使用log4j的邮件功能
    hive从查询中获取数据插入到表或动态分区
    map和reduce 个数的设定 (Hive优化)经典
    Mysql ERROR 145 (HY000)
    Mysql计算时间差
    小米刷机教程和GAE for android
    Hbase 使用方法
  • 原文地址:https://www.cnblogs.com/priarieNew/p/9754075.html
Copyright © 2011-2022 走看看