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. Java利用模板生成pdf并导出

    1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...

  2. Redis 键空间事件通知

    出处: 使用Redis完成定时任务 场景   使用Java做过项目的人大概都用过定时器.一般来说,项目里订单模块和评论模块,都会涉及到定时任务执行.比如说: 用户下订单后,需要在5分钟内完成支付,否则 ...

  3. .Net面试题二

    谈谈创建线程的方式 1.列举.Net页面之间传值的方式 2..Net中aspx页面从客户端浏览器开始请求到服务器返回响应所经历的过程 CLR主要运行过程 ASP.NET运行管道所有事件 3.如何理解委 ...

  4. OAuth授权看这篇就够了

    OAuth授权看这篇就够了

  5. prefixOverrides使用注意是事项

    不可以prefixOverrides=',' 否则执行的sql格式可能为 id ,time ,name... 导致sql报错,或者执行结果出错

  6. 【原创】大叔经验分享(58)kudu写入压力大时报错

    kudu写入压力大时报错 19/05/18 16:53:12 INFO AsyncKuduClient: Invalidating location fd52e4f930bc45458a8f29ed1 ...

  7. Centos7:nginx的安装,配置及使用

    安装依赖 yum install gcc-c++//gcc环境 yum install -y pcre pcre-devel//PCRE:nginx的http模块使用pcre来解析正则表达式 yum ...

  8. 简单的todolist的demo

    放上代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...

  9. JSR-303

    JSR-303是java标准的验证框架,已有的实现由 Hibernate validator 定义的注解验证bean属性: 空检查 @Null 验证对象是否为空 @NotNull 验证对象不为空 @N ...

  10. element table 表格 修改背景为透明并去除边框

    .el-table{ /* 表格字体颜色 */ color:white; /* 表格边框颜色 */ /* border: 0.5px solid #758a99; */ height: 500px; ...