Посмотрел пример с сайта: http://www.gotdotnet.ru/LearnDotNet/Mobility/738.aspx
По поводу определения текущего зяряда батареи КПК... (Используя библиотеку coredll.dll)
Вот выдержка статьи:
Конечно, есть и функциональность, доступная только в Windows CE; к ней тоже можно обращаться через PInvoke. Например, функция GetSystemPowerStatusEx имеется только в Windows CE API и предназначена для получения информации о состоянии дополнительной аккумуляторной батареи. В стандартном Win32 API такой функции нет. Объявление этой функции несколько сложнее, чем предыдущее объявление:
- Код: Выделить всё
Declare Function GetSystemPowerStatusEx Lib "coredll" _
Alias "GetSystemPowerStatusEx" _
(<[In](), Out()> ByVal lpSystemPowerStatus As SYSTEM_POWER_STATUS_EX, _
ByVal fUpdate As Boolean) As Long
Первое, что бросается в глаза, - указание типов параметра в объявлении. Эти типы используются, чтобы задать, какие параметры являются входными и какие параметры будут возвращаться. Так как "In" является еще и ключевым словом Visual Basic, приходится заключать "In" в квадратные скобки. Типы "In" и "Out" определяются в InteropServices, следовательно, вы должны импортировать это пространство имен:
- Код: Выделить всё
Imports System.Runtime.InteropServices
Далее вы заметите, что функция возвращает структуру SYSTEM_POWER_STATUS_EX. Чтобы работать с этой структурой, можно или воспользоваться ключевым словом Structure, или поместить ее определение в класс и соответственно упорядочить члены класса:
- Код: Выделить всё
<StructLayout(LayoutKind.Sequential)> _
Public Class SYSTEM_POWER_STATUS_EX
Public ACLineStatus As Byte
Public BatteryFlag As Byte
Public BatteryLifePercent As Byte
Public Reserved1 As Byte
Public BatteryLifeTime As Int16
Public BatteryFullLifeTime As Int16
Public Reserved2 As Byte
Public BatteryBackupFlag As Byte
Public BackupBatteryLifeTime As Byte ' Ошибка в документации
Public Reserved3 As Byte
Public BackupBatteryLifePercent As Byte ' Ошибка в документации
Public BackupBatteryFullLifeTime As Byte
End Class
Обратите внимание, что два члена - BackupBatteryLifeTime и BackupBatteryLifePercent - на самом деле надо поменять местами, а в документации они идут в неправильном порядке.
Теперь вызов функции не представляет сложности:
- Код: Выделить всё
Dim sps As New SYSTEM_POWER_STATUS_EX()
ret = GetSystemPowerStatusEx(sps, False)
Сам вызываю так:
- Код: Выделить всё
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ret As Long
Dim sps As New SYSTEM_POWER_STATUS_EX()
ret = GetSystemPowerStatusEx(sps, False)
Label1.Text = CStr(sps.BatteryLifePercent) & "%"
End Sub
Ругается (во время исполнения) на строку: ret = GetSystemPowerStatusEx(sps, False)
Ошибка
An unhandled exception of type 'System.NotSupportedException' occurred in Power.exe
Что делать то? Голову всю поломал!