RAPI提供了一些取系统信息的函数

CeGetSystemInfo:返回当前系统信息

CeGetSystemMetrics:获取Windows元素的尺寸和系统设置

CeGetVersionEx:获取当前运行的操作系统版本的扩展信息

CeGetSystemPowerStatusEx:获取电池状态

CeGlobalMemoryStatus:获取系统物理内存和虚拟内存信息

CeGetStoreInfomation:获取存储器信息并填入STORE_INFORMATION结构

        SYSTEM_INFO si; //系统信息
OSVERSIONINFO versionInfo; //版本信息
SYSTEM_POWER_STATUS_EX PowerStatus; //电源信息
MEMORYSYATUS ms; //内存信息
String info; private const int TimeOut = ;//异步连接设备超时时间2秒
private void btnGetSystemInfo_Click(object sender, EventArgs e)
{
Rapiinit ri = new Rapiinit();
ri.cbsize = Marshal.SizeOf(ri);
uint hRes = CeRapiInitEx(ref ri);
ManualResetEvent me = new ManualResetEvent(false);
me.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle(ri.heRapiInit, false);
if (!me.WaitOne(TimeOut, true))
{
CeRapiUninit();
} //1、检索系统信息
try
{
CeGetSystemInfo(out si);
}
catch (Exception)
{
throw new Exception("Error retrieving system info.");
} //2、检索设备操作系统版本号
bool b;
versionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFO));//设置为结构大小
b = CeGetVersionEx(out versionInfo);
if (!b)
{
throw new Exception("Error retrieving version information.");
} //3、检索设备电源状态
try
{
CeGetSystemPowerStatusEx(out PowerStatus, true);// true 表示读取最新的电源信息,否则将从缓存中获得
}
catch (Exception)
{
throw new Exception("Error retriving System power status.");
} // 4、检索设备内存状态
CeGlobalMemoryStatus(out ms); //设置检索信息的格式
info = "The connected device has an";
switch (si.wProcessorArchitecture)
{
case ProcessorArchitecture.Intel:
info += "Intel processor.\n";
break;
case ProcessorArchitecture.ARM:
info += "ARM processor.\n";
break;
default:
info += "unknown processor type.\n";
break;
} info += "OS vesion:" + versionInfo.dwMajorVersion + "." + versionInfo.dwMinorVersion + "." + versionInfo.dwBuildNumber + "\n";
if (PowerStatus.ACLineStatus == )
{
info += "On AC power:Yes\n";
}
else
{
info += "On AC power:NO\n";
}
info += "Battery level:"+PowerStatus.BackupBatteryLifePercent+"%\n";
info += "Total memory:" + string.Format("{0:###,###,###}", ms.dwTotalPhys + "\n"); richTextBox1.AppendText(info); CeRapiUninit();
} #region 声明API [DllImport("rapi.dll")]
private static extern uint CeRapiInitEx(ref Rapiinit pRapiInt); [DllImport("rapi.dll", CharSet = CharSet.Unicode)]
internal static extern int CeRapiUninit(); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern int CeGetSystemInfo(out SYSTEM_INFO pSI); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool CeGetVersionEx(out OSVERSIONINFO lpVersionInformation); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool CeGetSystemPowerStatusEx(out SYSTEM_POWER_STATUS_EX pStauts, bool fUpdate); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern void CeGlobalMemoryStatus(out MEMORYSYATUS msce); #endregion #region 声明结构 [StructLayout(LayoutKind.Explicit)]
private struct Rapiinit
{
[FieldOffset()]
public int cbsize;
[FieldOffset()]
public readonly IntPtr heRapiInit;
[FieldOffset()]
private readonly IntPtr hrRapiInit;
} //处理器架构CeGetSystemInfo
public enum ProcessorArchitecture : short
{
Intel=,
MIPS=,
Alpha=,
PPC=,
SHX=,
ARM=,
IA64=,
Alpha64=,
Unknown=-
} //移动设备内存信息
[StructLayout(LayoutKind.Sequential)]
public struct MEMORYSYATUS
{
internal uint dwLength;
public int dwMemoryLoad;//当前内存占用(%)
public int dwTotalPhys;//物理内存总量
public int dwAvailPhys;//可用物理内存
public int dwTotalPageFile;//分页数
public int dwAvailPageFile;//未分页
public int dwTotalVirtual;//虚拟内存总量
public int dwAvailVirtual;//可用虚拟内存
} //移动设备电源信息
public struct SYSTEM_POWER_STATUS_EX
{
public byte ACLineStatus;//交流电状态
public byte BatteryFlag;//电池充电状态 1 High,2 Low,4 Critical,8 Charging,128 No system battery,255 Unknown status
public byte BatteryLifePercent;//电池电量剩余百分比
internal byte Reserved1;//保留字段,设置为0
public int BatteryLifeTime;//电池电量剩余时间(秒)
public int BatteryFullLifeTime;//电池充满电的总可用时间(秒)
internal byte Reserved2;//保留字段,设置为0
public byte BackupBatteryFlag;//后备电池状态
public byte BackupBatteryLifePercent;//后备电池剩余电量百分比
internal byte Reserved3;//保留字段,设置为0
public int BackupBatteryLifeTime;//后备电池电量剩余时间(秒)
public int BackupBatteryFullLifeTime;//后备电池充满电的总可用时间(秒)
} //OSVERSIONINFO platform type
public enum PlatformType : int
{
//win32 on windows ce
VER_PLATFORM_WIN32_CE=
} public struct OSVERSIONINFO
{
internal int dwOSVersionInfoSize;
public int dwMajorVersion;//主板本信息
public int dwMinorVersion;//副版本信息
public int dwBuildNumber;//编译信息
public PlatformType dwPlatfromId;//操作系统类型
} //处理器类型CeGetSystemInfo
public enum ProcessorType : int
{
PROCESSOR_INTEL_386 = , //
PROCESSOR_INTEL_486 = , //
PROCESSOR_INTEL_PENTIUM = , //Pentium
PROCESSOR_INTEL_PENTIUMII = , //P2
PROCESSOR_INTEL_IA64 = , //IA 64
PROCESSOR_MIPS_R4000 = , //MIS 4000 series
PROCESSOR_ALPHA_21064 = , //Alpha 21064
PROCESSOR_PPC_403 = , //PowerPC 403
PROCESSOR_PPC_601 = , //PowerPC 601
PROCESSOR_PPC_603 = , //PowerPC 603
PROCESSOR_PPC_604 = , //PowerPC 604
PROCESSOR_PPC_620 = , //PowerPC 620
PROCESSOR_HITACHI_SH3 = , // Hitachi SH3
PROCESSOR_HITACHI_SH3E = , // Hitachi SH3E
PROCESSOR_HITACHI_SH4 = , //Hitachi SH4
PROCESSOR_MOTOROLA_821 = , //Motorola 821
PROCESSOR_SHx_SH3 = , //Hitachi SH3
PROCESSOR_SHx_SH4 = , //Hitachi SH4
PROCESSOR_STRONGARM = , //Intel StrongARM
PROCESSOR_ARM720 = , //ARM720
PROCESSOR_ARM820 = , //ARM820
PROCESSOR_ARM920 = , //ARM920
PROCESSOR_ARM_7TDMI = //ARM7
} //CeGetSystemInfo的数据结构
public struct SYSTEM_INFO
{
//处理器架构
public ProcessorArchitecture wProcessorArchitecture;
//保留
internal ushort wReserved;
//Specifies the page size and the granularity of page protection and commitment.
public int dwPageSize;
//应用程序可访问内存地址的最小值
//(Pointer to the lowest memory address accessible to applications and dynamic-link libraries (DLLs). )
public int lpMinimumApplicationAddress;
//应用程序可访问内存地址的最大值
public int lpMaximumApplicationAddress;
//Specifies a mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31.
public int dwActiveProcessorMask;
//处理器数量(Specifies the number of processors in the system.)
public int dwNumberOfProcessors;
//处理器类型(Specifies the type of processor in the system.)
public ProcessorType dwProcessorType;
//Specifies the granularity with which virtual memory is allocated.
public int dwAllocationGranularity;
//Specifies the system architecture-dependent processor level.
public short wProcessorLevel;
//Specifies an architecture-dependent processor revision.
public short wProcessorRevision;
} #endregion

Remote API(RAPI)之 系统信息的更多相关文章

  1. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  2. 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用

    0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...

  3. Docker remote API简单配置使用

    1.启动docker remote API的方式如下: docker -d -H uninx:///var/run/docker.sock -H tcp://0.0.0.0:5678 2.但是为了伴随 ...

  4. V-REP Remote API(C++)实现简单的关节转动

    基础内容参考:https://www.cnblogs.com/eternalmoonbeam/p/10753149.html V-REP客户端设置: 在V-REP场景文件中需要添加三个实体,包括两个形 ...

  5. docker remote api enable in ubuntu

    现在使用docker作为开发环境,操作系统是ubuntu16.10,pycharm中使用remote interpreter,需要用到remote api,结果发现自己的原答案是针对ubuntu 14 ...

  6. Docker Remote API v1.24

    1. Brief introduction The Remote API has replaced rcli. The daemon listens on unix:///var/run/docker ...

  7. 关于docker remote api未授权访问漏洞的学习与研究

    漏洞介绍: 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. docker ...

  8. docker 开启remote api

    docker官方文档上有相关说明(Configure and run Docker on various distributions),ubuntu上是可行的 sudo vi /etc/default ...

  9. Docker开启Remote API 访问 2375端口

    Docker常见端口 我看到的常见docker端口包括: 2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为h ...

  10. Docker remote API

    Docker remote API 该教程基于Ubuntu或Debian环境,如果不是,请略过本文 Docker API 在Docker生态系统中一共有三种API Registry API:提供了与来 ...

随机推荐

  1. python中全局global和局部nonlocal命名空间

    python中全局global和局部nonlocal命名空间 局部名称空间对全局名称空间的变量可以引用,但是无法改变. count = 1 def func1(): count = 2 print(c ...

  2. 【Life】 今天的思考

    今天一个实习生来问我问题,他要用python操作outlook发送邮件,代码是从网上找的. 在其他人的电脑上可以成功运行,但在他的电脑上就失败. 处理过程 (1)我查看了他method里的代码, 发现 ...

  3. 【xlwings】 wps 和 office 的excel creat_sheet区别

    最近在学习 xlwings,参考学习的网址:https://www.jianshu.com/p/b534e0d465f7 写得很棒,学到了很多. 在新建sheet表单, 发现一个问题. import ...

  4. Python验证数据的抽样分布类型

    假如要对一份统计数据进行分析,一般其来源来自于社会调研/普查,所以数据不是总体而是一定程度的抽样.对于抽样数据的分析,就可以结合上篇统计量及其抽样分布的内容,判断数据符合哪种分布.使用已知分布特性,可 ...

  5. windows服务总结

    一.创建windows服务项目创建完成后结构,如: 其中,Program.cs代码: using System; using System.Collections.Generic; using Sys ...

  6. luogu P1552 [APIO2012]派遣 题解--可并堆/贪心

    题目链接: https://www.luogu.org/problemnew/show/P1552 分析: 一开始愣是没看懂题,后面发现就是你要找一个树上点集使得各点权值之和小于\(M\),并且找一个 ...

  7. babel详解

    https://segmentfault.com/a/1190000019718925 https://babeljs.io/blog/2019/03/19/7.4.0#core-js-3-7646- ...

  8. mybatis sql语句中 in() 长度为0或null的情况

    mybatis sql语句中 in() 长度为0或null的情况 比如: select * from A where colName IN <foreach collection="m ...

  9. MyBatis、JDBC相关知识

    引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...

  10. js数组的所有方法

    修改器方法 下面的这些方法会改变调用它们的对象自身的值: Array.prototype.copyWithin()  在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值. Array.pr ...