none
WM6.0 如何实时获取电池电量值及WiFi无线信号值? RRS feed

  • 问题

  • 最近用vs2008(VB)在Windows mobile 6.0 professional 智能设备上开发一个管理程序,程序需要实时检测电池电量值及Wifi无线信号值,
    当电量或无线信号值低于指定的某个值时程序就不工作并向用户提示。我见过某些PDA上的软件是可以做到的!

    请问:

    一、如何实时获取电池的电量值,用百分比或数字显示?如%100、%99、%98...或100、99、98...
         如何知道当前是充电(电源)模式还是电池模式?
         (我曾经用SystemProperty.PowerBatteryState、SystemState.PowerBatteryStrength及BatteryLevel、BatteryState,
          但返回的只是个预设的大概数值,效果不理想)

    二、如何检测WiFi无线网络功能是否已打开?是否可通过编程方式打开/关闭?
         如何实时获取当前无线信号值(类似手机信号),用百分比或数字显示?
    2010年1月11日 4:29

答案

  • 你好,我来回答你提的一些问题。

    1.实时获取较精确的电量值以及电源模式,可以通过Native方法,其中有一个GetSystemPowerStatusEx2方法,返回的SYSTEM_POWER_STATUS_EX2结构体应该能够满足你的需求。使用的时候,我们需要P/Invoke,如下,

    [DllImport("CoreDLL")]

            public static extern int GetSystemPowerStatusEx2(

                 SYSTEM_POWER_STATUS_EX2 statusInfo,

                int length,

                int getLatest

                    );

            public static SYSTEM_POWER_STATUS_EX2 GetSystemPowerStatus()

            {

                SYSTEM_POWER_STATUS_EX2 retVal = new SYSTEM_POWER_STATUS_EX2();

               int result =  GetSystemPowerStatusEx2( retVal, Marshal.SizeOf(retVal) , 1);

                return retVal;

            }

    具体可以参考codeproject上的文章:Windows Mobile Power Management

    2.关于检测WiFi无线网络功能是否已打开,以及wifi的操作,可以使用OpennetCF,具体可以参考这个帖子:
    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesvbcs/thread/869f020e-3acf-4f36-afaa-70f36f96cec6/

    希望对你有用。


    施炯
    2010年1月11日 8:27
    版主

全部回复

  • 你好,我来回答你提的一些问题。

    1.实时获取较精确的电量值以及电源模式,可以通过Native方法,其中有一个GetSystemPowerStatusEx2方法,返回的SYSTEM_POWER_STATUS_EX2结构体应该能够满足你的需求。使用的时候,我们需要P/Invoke,如下,

    [DllImport("CoreDLL")]

            public static extern int GetSystemPowerStatusEx2(

                 SYSTEM_POWER_STATUS_EX2 statusInfo,

                int length,

                int getLatest

                    );

            public static SYSTEM_POWER_STATUS_EX2 GetSystemPowerStatus()

            {

                SYSTEM_POWER_STATUS_EX2 retVal = new SYSTEM_POWER_STATUS_EX2();

               int result =  GetSystemPowerStatusEx2( retVal, Marshal.SizeOf(retVal) , 1);

                return retVal;

            }

    具体可以参考codeproject上的文章:Windows Mobile Power Management

    2.关于检测WiFi无线网络功能是否已打开,以及wifi的操作,可以使用OpennetCF,具体可以参考这个帖子:
    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesvbcs/thread/869f020e-3acf-4f36-afaa-70f36f96cec6/

    希望对你有用。


    施炯
    2010年1月11日 8:27
    版主
  • 你好,我来回答你提的一些问题。

    1.实时获取较精确的电量值以及电源模式,可以通过Native方法,其中有一个GetSystemPowerStatusEx2方法,返回的SYSTEM_POWER_STATUS_EX2结构体应该能够满足你的需求。使用的时候,我们需要P/Invoke,如下,

    [DllImport("CoreDLL")]

            public static extern int GetSystemPowerStatusEx2(

                 SYSTEM_POWER_STATUS_EX2 statusInfo,

                int length,

                int getLatest

                    );

            public static SYSTEM_POWER_STATUS_EX2 GetSystemPowerStatus()

            {

                SYSTEM_POWER_STATUS_EX2 retVal = new SYSTEM_POWER_STATUS_EX2();

               int result =  GetSystemPowerStatusEx2( retVal, Marshal.SizeOf(retVal) , 1);

                return retVal;

            }

    具体可以参考codeproject上的文章:Windows Mobile Power Management

    2.关于检测WiFi无线网络功能是否已打开,以及wifi的操作,可以使用OpennetCF,具体可以参考这个帖子:
    http://social.msdn.microsoft.com/forums/en-US/vssmartdevicesvbcs/thread/869f020e-3acf-4f36-afaa-70f36f96cec6/

    希望对你有用。


    施炯

    谢谢您的帮助,电池的问题解决了!
    但第二个无线信号的问题还没搞定!似乎比较复杂,请问有没有更好的方法!
    2010年1月16日 6:44
  • 你好!我现在开发一个wince 5.0的程序,也是需要实时获取电量,获取电量的API 终端有提供,但调用线程获取时,经常会死机。

     "具体可以参考codeproject上的文章:Windows Mobile Power Management "的文章也不存在了。

    麻烦可以发个实时获取的代码给我参考下,谢谢!

     

    2010年5月13日 3:22
  • 你好,Dave_net

    可以到以下链接下载源代码:

    http://files.cnblogs.com/dearsj001/BatteryStatus.rar

    Good Luck!


    施炯
    2010年5月14日 6:28
    版主
  • 你好!施炯

    十分感谢你的回复! 源码我下载了。用了Timer 来 update 电量状态的。

    我这边终端跑起来有点慢,有多线程update电量的代码吗?谢谢!

     

    2010年5月17日 3:25
  • 你好,

    我这边没有你需要的代码工程。

    我试了一下,下面这个链接可以打开,链接确实是改变了:

    http://www.codeproject.com/KB/windows/WiMoPower1.aspx

    你可以参考源代码工程中win32部分的代码,因为是做了封装。


    施炯
    2010年5月17日 6:18
    版主
  • anyway,谢谢你的帮助!

    2010年5月19日 2:01