Remote API(RAPI)之 系统信息
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 = 2000;//异步连接设备超时时间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 == 1) { 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(0)] public int cbsize; [FieldOffset(4)] public readonly IntPtr heRapiInit; [FieldOffset(8)] private readonly IntPtr hrRapiInit; } //处理器架构CeGetSystemInfo public enum ProcessorArchitecture : short { Intel=0, MIPS=1, Alpha=2, PPC=3, SHX=4, ARM=5, IA64=6, Alpha64=7, Unknown=-1 } //移动设备内存信息 [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=3 } 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 = 386, //386 PROCESSOR_INTEL_486 = 486, //486 PROCESSOR_INTEL_PENTIUM = 586, //Pentium PROCESSOR_INTEL_PENTIUMII = 686, //P2 PROCESSOR_INTEL_IA64 = 2200, //IA 64 PROCESSOR_MIPS_R4000 = 4000, //MIS 4000 series PROCESSOR_ALPHA_21064 = 21064, //Alpha 21064 PROCESSOR_PPC_403 = 403, //PowerPC 403 PROCESSOR_PPC_601 = 601, //PowerPC 601 PROCESSOR_PPC_603 = 603, //PowerPC 603 PROCESSOR_PPC_604 = 604, //PowerPC 604 PROCESSOR_PPC_620 = 620, //PowerPC 620 PROCESSOR_HITACHI_SH3 = 10003, // Hitachi SH3 PROCESSOR_HITACHI_SH3E = 10004, // Hitachi SH3E PROCESSOR_HITACHI_SH4 = 10005, //Hitachi SH4 PROCESSOR_MOTOROLA_821 = 821, //Motorola 821 PROCESSOR_SHx_SH3 = 103, //Hitachi SH3 PROCESSOR_SHx_SH4 = 104, //Hitachi SH4 PROCESSOR_STRONGARM = 2577, //Intel StrongARM PROCESSOR_ARM720 = 1824, //ARM720 PROCESSOR_ARM820 = 2080, //ARM820 PROCESSOR_ARM920 = 2336, //ARM920 PROCESSOR_ARM_7TDMI = 70001 //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