Power Status для КПК

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

XGarik
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 01.11.2005 (Вт) 14:38

Power Status для КПК

Сообщение XGarik » 01.11.2005 (Вт) 15:01

Здравствуйте!
Посмотрел пример с сайта: 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

Что делать то? Голову всю поломал!

XGarik
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 01.11.2005 (Вт) 14:38

Сообщение XGarik » 01.11.2005 (Вт) 16:03

ВОТ И ВСЕ!!!! УРааааааааааа!!!!
Целый день сегодня убил, но победил!

Declare Function GetSystemPowerStatusEx Lib "coredll.dll" Alias "GetSystemPowerStatusEx" (<[In](), Out()> ByVal lpSystemPowerStatus As SYSTEM_POWER_STATUS_EX, ByVal fUpdate As Boolean) As Boolean

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.11.2005 (Вт) 18:19

Вообще то, в OpenCF есть класс Battery
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 02.11.2005 (Ср) 9:26

Выложи плиз этот OpenCF или где его скачать? :roll:
признаюсь сразу - не искал :oops:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 101

    TopList