Utilisation registre Pocket PC

Messages postés
6
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2010
- - Dernière réponse : 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.
Afficher la suite 

2 réponses

Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
13
0
Merci
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
Commenter la réponse de leprov
Messages postés
6
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2010
1
0
Merci
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 ?
Commenter la réponse de Glucoz21