Ждущий режим

Обсуждение проблем, возникающих при разработке программ для мобильных устройств.
Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Ждущий режим

Сообщение Конь » 19.11.2006 (Вс) 14:25

Можно сделать как-то, чтобы КПК не переходил в ждущий режим во время работы программы?
Подпись находится в стадии разработки...

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 19.11.2006 (Вс) 17:38

Копай в сторону SetPowerRequirement из coredll.dll.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 26.11.2006 (Вс) 18:25

А можно примерчик? А то в MSDN так все запутанно... :(
Подпись находится в стадии разработки...

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 26.11.2006 (Вс) 21:04

На примерчик времени совсем мало... Поэтому сразу извиняюсь за C#. Перевод на VB тривиален, главное ведь идея ;)
Функции из coredll.dll
Код: Выделить всё
      public enum CEDEVICE_POWER_STATE
      {
         PwrDeviceUnspecified = -1,
         D0 = 0,
         D1,
         D2,
         D3,
         D4,
         PwrDeviceMaximum
      }

      [DllImport("coredll.dll", SetLastError = true)]
      public static extern IntPtr SetPowerRequirement(
         string pvDevice,
         CEDEVICE_POWER_STATE DeviceState,
         uint DeviceFlags,//1
         IntPtr pvSystemState,
         uint StateFlags
      );

      [DllImport("coredll.dll", SetLastError = true)]
      public static extern uint ReleasePowerRequirement(
         IntPtr hPowerReq
      );

Запретить отключние подсветки
Код: Выделить всё
         IntPtr _backlight = SetPowerRequirement("BKL1:", CEDEVICE_POWER_STATE.D0, 1, IntPtr.Zero, 0);

Разрешить обратно
Код: Выделить всё
            ReleasePowerRequirement(_backlight);

Разумеется, _backlight - хэндл (тип IntPtr), котрый нужно хранить пока держим включенной подсветку.
Если под "ждущим режимом" имелось в виду что-то другое, наверное надо поменять устройство BKL1 на это самое что-то другое.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 28.11.2006 (Вт) 4:07

О... Я ни слова на С не понимаю... :oops:
Подпись находится в стадии разработки...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.11.2006 (Вт) 6:57

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 28.11.2006 (Вт) 12:16

Скажите мне, правильно я делаю, или это бред?.. Неработающий бред...

Код: Выделить всё
    Public Declare Function SetPowerRequirement Lib "coredll.dll" (ByVal pvDevice As String, ByVal DeviceState As CEDEVICE_POWER_STATE, ByVal DeviceFlags As System.UInt32, ByVal pvSystemState As IntPtr, ByVal StateFlags As System.UInt32) As IntPtr
    Public Declare Function ReleasePowerRequirement Lib "coredll.dll" (ByVal hPowerReq As IntPtr) As System.UInt32
    Dim _backlight As IntPtr

    Public Enum CEDEVICE_POWER_STATE
        PwrDeviceUnspecified = -1
        D0 = 0
        D1
        D2
        D3
        D4
        PwrDeviceMaximum
    End Enum

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cmb2.SelectedItem = cmb2.Items.Item(3)
        cmb3.SelectedItem = cmb3.Items.Item(5)
        Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("PDA_Метроном.Bp2.wav")
        m_soundBytes = New Byte(Stream.Length) {}
        Stream.Read(m_soundBytes, 0, Stream.Length)

        _backlight = SetPowerRequirement("BKL1:", CEDEVICE_POWER_STATE.D0, Convert.ToUInt32(1), IntPtr.Zero, Convert.ToUInt32(0))

    End Sub
Подпись находится в стадии разработки...

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 29.11.2006 (Ср) 1:47

Вроде все правильно... А в каком плане не работает? Подсветка гаснет или ошибка? Можно еще 3й параметр SetPowerRequirement изменить - вместо 1 задать (4096 Or 1) - добавить флаг POWER_FORCE. Не тестировал; в MSDN сказано - в таком случае напряжение на девайс будет подаваться даже в случае Suspend (Indicates that the requirement should be enforced even during a system suspend). В любом случае, я не уверен что надо устанавливать требование именно к подсветке (BKL1). Есть прога, показывающая список устройств КПК в виде дерева. [url=http://www.phm.lu/downloads/download.aspx?{2D57F8F8-6EDE-407d-BA58-CF549CF8B551}]PHM Device Manager, 50КБ[/url]. С ее помощью можно посмотреть имена устройств (типа BKL1 и проч.). Прога старенькая, надеюсь еще работает. Я ничего сильно интересного у себя не нашел, кроме подсветки. Есть еще правда девайс "батарейка" (BAT1), но это по-моему не совсем то.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 29.11.2006 (Ср) 4:18

У меня она отображает половину устройств как "Other device"... В т.ч. подсветку и батарейку.
Подпись находится в стадии разработки...

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 29.11.2006 (Ср) 18:40

Это нормальное поведение. У меня аналогично.


Вернуться в Visual Basic для мобильных устройств

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList