如何使用VB.Net判断Windows移动设备是否连接到外部电源?

时间:2008-12-12 15:35:02

标签: windows-mobile

Windows Mobile设备在设备使用电池供电或外接电源时具有不同的暂停行为。

在我的应用程序中,使用VB.net编写,我需要能够确定设备是否已连接外部电源。

是否有一种方法可以从Compact框架中获取此状态?

4 个答案:

答案 0 :(得分:3)

如果您仅使用WIndowsMo​​bile 5.0及更高版本,State and Notification Broker可以查看,特别是Status namespace

为了获得更广泛的支持,您可以使用NOTIFICATION_EVENT_AC_APPLIED检测调用CeRunAppAtEvent(这可以设置命名事件而不是仅运行应用程序)的状态转换(来自或来自AC电源)或NOTIFICATION_EVENT_AC_REMOVED个事件代码。这就是DeviceManagement class中的Smart Device Framework所做的。

您可以通过调用GetSystemPowerStatusEx2来检测当前状态(而不是转换)。

答案 1 :(得分:1)

if (SystemState.PowerBatteryState & BatteryState.Charging) ...

答案 2 :(得分:1)

首先,通过将其复制到您的代码(模块或类)中来实现所有这些:https://msdn.microsoft.com/en-us/library/aa457088.aspx

然后:

Public Function isOnCharge() As Boolean
  Dim status As New SYSTEM_POWER_STATUS_EX2
  GetSystemPowerStatusEx2(status, Convert.ToUInt32(Marshal.SizeOf(status)), True)    

  If status.BatteryCurrent < 10000 Then
       return true 'plugged in
  else return false 'Unplugged
  End If
End Function

我这样做是因为带有SystemState.PowerBatteryState&amp; BatteryState.Charging不起作用,所以我设法用另一种方法使它工作。

如果我的设备已插入,则status.batteryCurrent小于10000,但如果已拔下插头,则其值超过4000000.如果您想要更精确的值,可以对您的设备进行一些测试。干杯!

答案 3 :(得分:0)

这可能超出了您的要求,但我在Windows Mobile Powermanagement APIS上写了一些内容。它使用了Chris刚才引用的相同API,但是面向.Net(抱歉,它在C#中,而不是VB.Net)。

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