Utilisation registre Pocket PC

Glucoz21 Messages postés 6 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 avril 2010 - 1 mars 2010 à 10:30
Glucoz21 Messages postés 6 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 avril 2010 - 1 mars 2010 à 13:47
Bonjour à tous.

Je ne trouve pas de section sur ce forum traitant de la programmation sous pocket PC, ce que je trouve plutôt dommage.
Je poste donc ici, merci de m'indiquer si ce n'est pas au bon endroit.

Voila mon problème.
Je suis en train de créer une application sur pocket PC avec une zone de texte et 4 boutons. 2 boutons pour changer la police de la zone de texte et 2 boutons pour changer la luminosité.
Mon problème réside dans le changement de la luminosité...
Pour faire ceci, j'ai réussi à trouver quelle valeur changer dans le registre et à le faire en code ce qui fonctionne très bien, j'ai pu le constater grâce à un petit utilitaire qui me permet d'éditer le registre.
Seulement voilà, j'aimerais que ces changements soient instantanés, c'est à dire, j'appuie sur le bouton qui diminue la luminosité, et paf ça diminue la luminosité d'un cran ... etc. Or dans mon cas, je suis obligé de redémarrer la machine pour voir les changements apparaitre.

La valeur que je dois changer se trouve sous HKEY_LOCAL_MACHINE\Drivers\BuiltIn\BackLight. J'ai testé en modifiant des valeurs dans HKEY_CURRENT_USER et là il n'y a pas de problème, les valeurs sont changées instantanément et on voit les modifications en direct.

Est-ce que quelqu'un a une idée de ce que je peux faire pour résoudre ceci ?

Je vous poste ici mon code :


public partial class Form1 : Form
    {
        string B11 = "DimmLevelACPower";
        string B12 = "DimmLevelBattery";
        RegistryKey regBackLight = Registry.LocalMachine.OpenSubKey("Drivers\\BuiltIn\\BackLight", true);
        int valeurBackLight = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void pbBrightnessUp_Click(object sender, EventArgs e)
        {
            RegistryKey key = Registry.LocalMachine.CreateSubKey("Drivers\\BuiltIn\\BackLight");
            if (valeurBackLight < 15)
            {
                valeurBackLight++;
                key.SetValue(B11, valeurBackLight);
                key.SetValue(B12, valeurBackLight);
            }
            key.Close();
            CoreDLL.SendEvent("BackLightChangeEvent");
        }

        private void pbBrightnessDown_Click(object sender, EventArgs e)
        {
            RegistryKey key = Registry.LocalMachine.CreateSubKey("Drivers\\BuiltIn\\BackLight");
            if (valeurBackLight > 1)
            {
                valeurBackLight--;
                key.SetValue(B11, valeurBackLight);
                key.SetValue(B12, valeurBackLight);
            }
            key.Close();
            CoreDLL.SendEvent("BackLightChangeEvent");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey("Drivers\\BuiltIn\\BackLight");
            if (key == null) return;

            try
            {
                valeurBackLight = Int32.Parse(key.GetValue(B12).ToString());
            }
            catch { }
        }

        public static class CoreDLL
        {
            [DllImport("CoreDll.dll")]
            private static extern IntPtr CreateEvent(
                string lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);

            private enum EventModification
            {
                Pulse = 1,
                Reset = 2,
                Set = 3
            }

            [DllImport("coredll.dll")]
            private static extern Int32 EventModify(
                IntPtr hEvent, EventModification mod);

            [DllImport("coredll.dll")]
            private static extern Int32 CloseHandle(IntPtr h);

            public static void SendEvent(string evtName)
            {
                IntPtr evt = CreateEvent(null, false, true, evtName);
                if (evt == IntPtr.Zero) throw new InvalidOperationException("Failed to create event");
                try
                {
                    EventModify(evt, EventModification.Pulse);
                }
                finally
                {
                    CloseHandle(evt);
                }
            }
        }
    }




Merci beaucoup d'avance pour toutes vos réponses.

2 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
1 mars 2010 à 12:40
Le probleme est qu'il te faut appeler les bonnes API, et non changer la valeur dans la base de registre. Je n'ai plus ca en tete, cependant il existe une fonction C qui te permet de régler la luminosité (et qui change tout seul les valeurs dans la base de registre, au passage).
Recherche dans la doc Windows Mobile et Windows CE
0
Glucoz21 Messages postés 6 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 avril 2010 1
1 mars 2010 à 13:47
Je travaille en C# sous pocket PC et j'ai déjà regardé un peu partout, seulement je dois faire un reboot de ma machine pour que ces valeurs soient prises en compte.

Et donc je cherche le moyen, en C#, de passer outre ce reboot pour que le rétroéclairage se change en direct...
Est-ce possible ?
0
Rejoignez-nous