C/C++ Windows API——获取计算机信息 转
转自:http://blog.csdn.net/chy555chy/article
| 函数 | 头文件 | 作用 | 
|---|---|---|
| GetVersionEx | <windows.h> | 获取系统版本信息(deprecated) | 
| VerifyVersionInfo | <VersionHelpers.h> | 判断当前系统信息是否符合条件 | 
| GetComputerName | <windows.h> | 获取计算机名称 | 
| GetUserName | <windows.h> | 获取用户名 | 
| memset | <windows.h> | 对结构体或数组进行清零操作,跨平台 | 
| ZeroMemory | <windows.h> | 对结构体或数组进行清零操作,仅适用于Windows | 
| ={0} | 是结构体和数组的一种初始化方式,它是将结构体中基本类型变量赋默认值,当结构体中有非基本类型(例如类对象)时,会编译错误,这也是一种保护。 | |
| LOBYTE | 取1个字节(byte)的低4位 | |
| HIBYTE | 取1个字节(byte)的高4位 | |
| LOWORD | 取2个字节(short)的低8位 | |
| HIWORD | 取2个字节(short)的高8位 | 
// ComputerInfo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>//GetComputerName,GetUserName
#include <VersionHelpers.h>//IsWindows7OrGreater, IsWindows10OrGreater 
int main()
{
    BOOL ret;
    /*
    typedef struct {
        DWORD dwOSVersionInfoSize;  //在使用GetVersionEx之前要将此初始化为结构的大小
        DWORD dwMajorVersion;       //系统主版本号
        DWORD dwMinorVersion;       //系统次版本号
        DWORD dwBuildNumber;        //系统构建号
        DWORD dwPlatformId;         //系统支持的平台
        TCHAR szCSDVersion[128];    //系统补丁包的名称
        WORD wServicePackMajor;     //系统补丁包的主版本
        WORD wServicePackMinor;     //系统补丁包的次版本
        WORD wSuiteMask;            //标识系统上的程序组
        BYTE wProductType;          //标识系统类型
        BYTE wReserved;             //保留,未使用
    } OSVERSIONINFOEX, *POSVERSIONINFOEX;
    //Compile Error: GetVersionEx‘ declared deprecated
    BOOL GetVersionEx(POSVERSIONINFO pVersionInformation);
    return 如果函数成功,返回值是一个非零值。
    */
    /*
    https://msdn.microsoft.com/en-us/ms724833(v=vs.85)
    typedef struct _OSVERSIONINFOEX {
        DWORD dwOSVersionInfoSize;
        DWORD dwMajorVersion;
        DWORD dwMinorVersion;
        DWORD dwBuildNumber;
        DWORD dwPlatformId;
        TCHAR szCSDVersion[128];
        WORD  wServicePackMajor;
        WORD  wServicePackMinor;
        WORD  wSuiteMask;
        BYTE  wProductType;
        BYTE  wReserved;
    } OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
    BOOL WINAPI VerifyVersionInfo(
        _In_ LPOSVERSIONINFOEX lpVersionInfo,   //HIBYTE(_WIN32_WINNT_WIN7)
        _In_ DWORD             dwTypeMask,
        _In_ DWORDLONG         dwlConditionMask //VER_SET_CONDITION 可以是 VER_GREATER,VERSION_EQU,VERSION_LESS
    );
    */
    OSVERSIONINFOEX versionInfo;
    //Initialize the OSVERSIONINFOEX structure.
    ZeroMemory(&versionInfo, sizeof(versionInfo));
    versionInfo.dwMajorVersion = HIBYTE(_WIN32_WINNT_WIN7);
    DWORD dwTypeMask = VER_MAJORVERSION;
    DWORDLONG dwlConditionMask = 0;
    VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER);
    ret = VerifyVersionInfo(&versionInfo, dwTypeMask, dwlConditionMask);
    printf("VerifyVersionInfo %d -> %d\n", versionInfo.dwMajorVersion, ret);
    ret = IsWindowsServer();
    printf("IsWindowsServer -> %d\n", ret);
    ret = IsWindows7OrGreater();
    printf("IsWindows7OrGreater -> %d\n", ret);
    TCHAR szComputerName[MAX_COMPUTERNAME_LENGTH + 1];
    DWORD len = MAX_COMPUTERNAME_LENGTH + 1;
    /*
    BOOL WINAPI GetComputerName(
        __out   LPTSTR  lpBuffer,   //指向一块内存缓冲区,这个缓冲区用于接收计算机名称或群集的虚拟服务器名称。缓冲区的大小应该足够大,以便能够容纳MAX_COMPUTERNAME_LENGTH + 1个字符。
        __inout LPDWORD lpnSize     //在输入时,指定的缓冲区的大小,这个大小是按照TCHAR计算的;在输出的时候,字符的长度不包括终止空字符\0。
    );
    return 如果函数成功,返回值是一个非零值。
    */
    ret = GetComputerName(szComputerName, &len);
    if (!ret) {
        printf("GetComputerName fail(%ld)\n", GetLastError());
    }
    else {
        wprintf(L"GetComputerName -> %s, len=%d\n", szComputerName, len);
    }
    /*
    BOOL WINAPI GetComputerName(
        __out       LPTSTR  lpBuffer,
        __in_out    LPDWORD lpnSize
    );
    */
    ret = GetUserName(szComputerName, &len);
    if (!ret) {
        printf("GetUserName fail(%ld)\n", GetLastError());
    }
    else {
        wprintf(L"GetUserName -> %s, len=%d\n", szComputerName, len);
    }
    system("pause");
    return 0;
}
C/C++ Windows API——获取计算机信息 转的更多相关文章
- C/C++ Windows API——获取系统指定目录(转)
		
原文地址:C/C++ Windows API——获取系统指定目录 经测试,在win10 VS2017中用wprintf()输出正常,SHGetSpecialFolderPath函数也正常运行 但是用M ...
 - Windows API获取系统配置文件的配置参数
		
在Windows平台下获取系统配置文件(如:System.ini)的配置参数. 系统配置文件System.ini的内容如下: [SYSTEM] ServiceIP = 10.128.11.99:600 ...
 - Qt使用windows API获取程序运行时占用内存 good
		
使用的是psapi.h中的GetProcessMemoryInfo函数,但是运行到该函数时就强制退出了. 后来,百度到原因是 原来Qt编译时加了-mthread,createprocess时要使的Ha ...
 - [windows API]获取当前系统图标,文字大小
		
取DPI 缩放比例 HWND wnd = ::GetDesktopWindow(); dbg_print("desktopwnd:0x%X\n",wnd); HDC dc = G ...
 - 调用windows api 获取系统分辨率
		
c++中: int cxScreen,cyScreen; cxScreen=GetSystemMetrics(SM_CXSCREEN); cyScreen=GetSystemMetrics(SM_CY ...
 - 通过 Windows API 获取鼠标位置等状态信息
		
#include <graphics.h> #include <stdio.h> void main() { initgraph(, ); // 初始化绘图窗口 HWND hw ...
 - C# Windows API
		
API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...
 - Windows API 函数列表 附帮助手册
		
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
 - Windows API Hooking in Python
		
catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...
 
随机推荐
- MyBatis_注解式开发
			
一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface ...
 - laravel5.7 表单验证
			
laravel5.7 表单验证 一.创建表单请求 1.找到 larave5.7 文档 验证 中的创建表单请求,这里就要用到命令:php artisan make:request BrandReques ...
 - es6 import笔记
			
export输出: // profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958; export ...
 - csharp: DataTable export to excel,word,csv etc
			
http://code.msdn.microsoft.com/office/Export-GridView-to-07c9f836 https://exporter.codeplex.com/ htt ...
 - vue-cli脚手架之其他文件解释
			
好了,脚手架目录中重要的文件基本都介绍了,但还有一个不太注意到的文件没有解释,这里也说明一下. config文件夹下的index.js,作用是不同开发环境下的参数配置(可选项很多,生产环境.开发环境. ...
 - File中mkdir()和mkdirs()的区别
			
mkdir() 创建此抽象路径名指定的目录.只能在已经存在的目录中创建文件夹 如: File folder = new File("d:\\test1\\test2"); fold ...
 - Codeforces Round #411 A. Fake NP
			
A. Fake NP time limit per test 1 second memory limit per test 256 megabytes Tavak and Seyyed a ...
 - DELPHI SOKET 编程--使用TServerSocket和TClientSocket
			
本文采用delphi7+TServerSocket+TClientSocket; 笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题.现在将本人总结出来的TServerSocke ...
 - Studying TCP's Congestion Window using NS
			
Studying TCP's Congestion Window using NS How to obtain TCP's CWND value The most important value th ...
 - mongodb 3.4分片复制集配置
			
1:启动三个实例 mongod -f /home/mongodb/db27017/mongodb27017.conf mongod -f /home/mongodb/db27018/mongodb27 ...