Screen Management Library en dotnet

Salut, voici la seconde librairie que je vous avais promis, encapsulant du code natif pour jouer avec les résolutions d’affichages en dotnet managed.

Cette librairie n’est pas évidente à comprendre je vais donc vous montrer un exemple et n’hésitez pas à poser vos questions.

Dans notre exemple nous avons deux listbox, une listant les devices (sorties graphique) et une autre listant les mode de la device selectionné (par exemple, ecran 1 peu faire du 800*600 en 16bit, 800*600 en 32bit… etc… etc…).

Pour des questions de facilitées je reste sur du wpf “crado”, c’est a dire sans binding et autre mvvm afin de parler a un maximum de personne et correspondre a un maximum de cas.

Lors de l’instanciation nous remplirons notre première listbox ainsi :

this.listDevices.ItemsSource = Screenmgmt.EnumDevices();

Avec cela nous récuperons toutes les devices dans une List<string>

Ensuite,dans le handler tu SelectionChanged sur la listDevices :

            int devNum = listDevices.SelectedIndex;
            btnSet.IsEnabled = Screenmgmt.MainDevice(devNum);
            this.listSettings.ItemsSource = Screenmgmt.EnumModes(devNum).Distinct().Reverse();

Nous récupérons le selected index, si c’est la device principale on active le bouton “appliquer” (optionnel) et enfin nous récuperons tous les modes d’affichage de notre device.

Enfin, lorsque l’on click sur appliquer nous voulons a la fois appliquer la nouvelle resolution mais aussi donner la possibilitée de faire un rollback sur cancel :

   List<int> now = Screenmgmt.SearchActualResolutionModes();
            int set = Screenmgmt.SearchSettingsString(listSettings.SelectedValue.ToString(), listDevices.SelectedIndex);
            if (set != -1)
            {
                Screenmgmt.ChangeResolution(listDevices.SelectedIndex, set);
                if (MessageBox.Show(“Accept ? “, “?”, MessageBoxButtons.OKCancel) == MessageButtons.Cancel)
                    Screenmgmt.ChangeResolution(now[0], now[1]);
            }

On récupère dans une list<string> le numéro de l’écran et l’index du mode actuel de ce dernier afin de pouvoir revenir en arrière. ensuite on récupère l’index du mode a tester, pour ce faire on envoi les deux items sélectionné a une fonction permettant de chercher en string les éléments et qui retourne ensuite le mode associé. On applique ensuite le changement de résolution  avec change résolution en donnant l’index de l’ecran et l’index du mode. Une messageBox est ensuite affiché, si la réponse est Cancel, on reviens avec ChangeResolution a la précédente résolution grace au tableau récupéré au debut contenant le précédent index du mode et de l’ecran.

J’ai développé un control custom fonctionnant comme une message box avec un timer pour ce cas ci. En effet, si la résolution n’est pas supporté par exemple, il sera impossible a l’utilisateur de cliquer sur “Cancel”. Je posterai cette custom message box avec un timer bientôt. Mais je ne voulais pas mélanger cette dernière a cet article.

Voila le code source :- Source -:
Et la librairie :- DLL -:

Inform@tiquement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s