none
如何控制PPC的背景灯? RRS feed

答案

  • 你代码中的:

               const int WM_WININICHANGE = 0x001A;
                const int HWND_BROADCAST = 0xffff;

    为什么没有用?

    你可以尝试给系统发送消息来通知:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, NULL,NULL);

    (SendMessage在coredll.dll中)

    不过这不一定凑效, 因为背景灯的管理目前没有标准的编程API控制, 电源和显示驱动相关的部分很大程度上取决于OEM的实现.在你的代码运行之前可以先在你的目标机器上运行一下SDK中的win32sample:myBacklight 看能否正常运行,如果可以,再参照相关的实现,否则你最好多使用一下你的搜索引擎了(把你的目标机型列为关键字之一),

     

    黄季冬

    http://fox23.cnblogs.com

     

    2008年11月15日 12:11
    版主

全部回复

  •  

    private void btnUp_Click(object sender, EventArgs e)
            {
                SetLight(4);
            }

            private void btnDown_Click(object sender, EventArgs e)
            {
                SetLight(0);
            }

            void SetLight(int level)
            {
               
                const int WM_WININICHANGE = 0x001A;
                const int HWND_BROADCAST = 0xffff;
                string regKey = @"ControlPanel\Backlight";

                RegistryKey key = Registry.CurrentUser.OpenSubKey(regKey, true);
                string valueName = "ACBrightness";
              

                    key.SetValue(valueName, (object)level);
              

     

                    key = Registry.CurrentUser.OpenSubKey(regKey, true);
                    valueName = "Brightness";
                    key.SetValue(valueName, (object)level);
               

                DoAutoResetEvent("BackLightChangeEvent");
            }

            void DoAutoResetEvent(string eventString)
            {
                IntPtr newHandle = IntPtr.Zero;
                try
                {

                    newHandle = NamedEvent.CreateEvent(System.IntPtr.Zero, false, true, eventString);
                    NamedEvent.EventModify(newHandle, (int)EventFlags.EVENT_SET);
                    NamedEvent.CloseHandle
                    (newHandle);
                }
                finally
                {
                    newHandle = IntPtr.Zero;
                }

            }

    这是我的代码,在HTC S1,WM6.1上,无效果.

     

    2008年11月12日 9:07
  • 将亮度调整后,重启PPC能看到效果. 有人能告诉我:如何去通知操作系统,注册表里的亮度已经更新,请它调整亮度吗?

    2008年11月13日 6:29
  • 你代码中的:

               const int WM_WININICHANGE = 0x001A;
                const int HWND_BROADCAST = 0xffff;

    为什么没有用?

    你可以尝试给系统发送消息来通知:

    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, NULL,NULL);

    (SendMessage在coredll.dll中)

    不过这不一定凑效, 因为背景灯的管理目前没有标准的编程API控制, 电源和显示驱动相关的部分很大程度上取决于OEM的实现.在你的代码运行之前可以先在你的目标机器上运行一下SDK中的win32sample:myBacklight 看能否正常运行,如果可以,再参照相关的实现,否则你最好多使用一下你的搜索引擎了(把你的目标机型列为关键字之一),

     

    黄季冬

    http://fox23.cnblogs.com

     

    2008年11月15日 12:11
    版主