2011-03-02 8 views
1

私はインターネットを検索し、C#コードからデバイスの明るさを変更する方法を見つけました。次のようになります。Windows CE 6.0のバックライト輝度コントロール

[DllImport("coredll.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool EventModify(IntPtr hEvent, [In, MarshalAs(UnmanagedType.U4)] int dEvent); 

    [DllImport("coredll.Dll")] 
    private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); 

    [DllImport("coredll.Dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool CloseHandle(IntPtr hObject); 

    private static bool SetEvent(IntPtr hEvent) 
    { 
     return EventModify(hEvent, (int)EventFlags.SET); 
    } 

    private void SetBacklightValue(string name, int v) 
    { 
     RegistryKey key = Registry.CurrentUser.OpenSubKey(@"ControlPanel\Backlight", true); 
     if (key != null) 
     { 
      key.SetValue(name, v); 
      key.Close(); 
     } 
    } 

    enum EventFlags 
    { 
     PULSE = 1, 
     RESET = 2, 
     SET = 3 
    } 

    private static void RaiseBackLightChangeEvent() 
    { 
     IntPtr hBackLightEvent = CreateEvent(IntPtr.Zero, false, false, "BackLightChangeEvent"); 
     if (hBackLightEvent != IntPtr.Zero) 
     { 
      bool result = SetEvent(hBackLightEvent); 
      CloseHandle(hBackLightEvent); 
     } 

    } 

レジストリの明るさの値が正常に変更されました。そして、私はPCからデバイスを切断した後(または接続)明るさも変化します。しかし、現時点では、実際の値が設定されていません。 何か不足している可能性があります(RaiseBackLightChangeEventはうまく動作し、エラーはありません)。私は他のイベントを起こす必要がありますか?そうでない場合は、デバイスの電源状態を実際に変更せずにシミュレーションするにはどうすればよいですか?または、レジストリからシステムの更新値を強制的に適用する方法はありますか? ご協力いただきありがとうございます。

答えて

2

バックライト制御は標準化されておらず、デバイスごとに異なります。いくつかのデバイスではレジストリを変更すれば十分ですが、他のデバイスでは "名前付きイベント"(これはOpenNetcfを使用できます)を起動する必要があります。さらにイベントの名前を知る必要があるデバイスでもそうです。他のデバイスの場合、それを行う方法はありません。私はあなたの最善の選択は、ターゲットデバイスの製造元に連絡し、彼らがどのようにこの問題に対処しているの詳細について尋ねるだろうと思います。

関連する問題