• 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.
    ";
                        break;
                    case ProcessorArchitecture.ARM:
                        info += "ARM processor.
    ";
                        break;
                    default:
                        info += "unknown processor type.
    ";
                        break;
                }
    
                info += "OS vesion:" + versionInfo.dwMajorVersion + "." + versionInfo.dwMinorVersion + "." + versionInfo.dwBuildNumber + "
    ";
                if (PowerStatus.ACLineStatus == 1)
                {
                    info += "On AC power:Yes
    ";
                }
                else
                {
                    info += "On AC power:NO
    ";
                }
                info += "Battery level:"+PowerStatus.BackupBatteryLifePercent+"%
    ";
                info += "Total memory:" + string.Format("{0:###,###,###}", ms.dwTotalPhys + "
    ");
    
                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
  • 相关阅读:
    web接口文档apidoc的使用
    python 文件重命名
    sort()排序
    JavaScript自定义事件和触发(createEvent, dispatchEvent)
    Sql 2016 安装到sql_shared_mrconfigaction-install-confignonrc-cpu64卡住不动,是什么原因呢?
    基础提供程序在Open上失败
    win10 Hyper-v 虚拟机监控程序灰色 尝试检索虚拟交换机列表时出错【转载】
    相对路径获取文件名
    省市区三级联动
    反射==>不明确的匹配
  • 原文地址:https://www.cnblogs.com/Sukie-s-home/p/5781161.html
Copyright © 2020-2023  润新知