mercredi 30 octobre 2013

Copier un fichier en visual basic

Copier un fichier en visual basic

FileCopy est la méthode la plus simple pour copier un fichier sous Windows à l’aide de Visual Basic ou VB. La fonction ne possède que 2 arguments:


        'calling the FileCopy method, very simple
        FileCopy(Source, Destination)


mercredi 23 octobre 2013

Importer un fichier délimité par des séparateurs en VB.

Importer un fichier délimité par des séparateurs en VB.

Voici deux exemples pour récupérer des valeurs séparées par des caractères. Le premier affiche la chaîne de caractères à gauche du séparateur puis affiche celui à droite. Le deuxième exemple fait la même chose mais accepte les séparateurs à plus d’un caractère.
Ces 2 exemples sont parfaits pour sauvegarder des fichiers textes contenant des valeurs associés à des noms ou des clefs. Les séparateurs ou délimiteurs sont souvent représenté par des symboles comme le égal (=) ou par des espaces. D’autre fois, les délimiteurs ont plus d’un caractère. Par exemple : « => »
Si vous aimez ces exemples, soyer libre de partager ou de télécharger le projet exemple en Visual basic ici : SampleTextwithSeperator

mardi 24 septembre 2013

BlackBerry à vendre

BlackBerry à vendre

Fairfax Financial a offert 4.7 milliards de dollars canadiens à la compagnie BlackBerry pour l’achat de ses actions.  Cette offre est une bonne nouvelle pour BlackBerry puisqu’elle représente un prix plancher pour ses actions. L’offre d’achat est valide jusqu’en novembre 2013 et la compagnie BlackBerry pourrait éventuellement se faire offrir des offres plus intéressantes.

À leur place, je n’attendrais pas trop.  Lorsqu’on suit la compagnie dans les dernières années, on comprend qu’il est dans l’intérêt de BlackBerry de se renouveler. Les efforts des 2 dernières années ont été bons, mais insuffisants.

Il y a eu une époque où la compagnie BlackBerry était une entreprise située au sommet des technologies des télécommunications. L’action valait 145$ à son plus haut niveau.

Comment peut-on expliquer cette débandade ? Quelles leçons en tirer ?

jeudi 12 septembre 2013

MDB and ACCDB file searcher.

Recherche de fichiers MDB et ACCDB.

Trouver tous les fichiers MS-Access à partir d’un répertoire et les afficher dans une fenêtre. Le code est écrit en vb. Le programme peut sembler inutile, mais il ouvre la porte à d’éventuels traitements dans ces bases de données. C’est pourquoi le développement d’un programme devient intéressant lorsqu’on veut automatiser des opérations.
J’ai aussi ajouté dans cet exemple une infobulle dynamique et quelques  fonctionnalités de bases pour rendre le programme plus attrayant.  Je vous invite à télécharger l’exemple situé à la fin de cet article.
Revenez visiter mon site web à l’occasion.


mercredi 11 septembre 2013

Pourquoi abandonner le développement sur 32bits au profit du 64 bits?

Pourquoi abandonner le développement sur 32bits au profit du 64 bits?
Plusieurs logiciels aujourd'hui sont distribués en 2 formats: 32 et 64 bits. La raison pour laquelle ces 2 formats sont produits est parce que plusieurs logiciels hôtes (et systèmes d'exploitation) fonctionnent encore en 32 bits. Les raisons pour lesquelles ces logiciels hôtes continues de fonctionner en 32 bits sont multiples, mais peuvent être catégorisés en 2 parties:

-raisons techniques;
-raisons sociales économiques ;

Étant donné que je rédige cet article de blogue avec mon petit téléphone Samsung, je ne vais pas développer une grosse argumentation comme on l'aurait fait pour la rédaction d'un texte pour un cours de sciences humaines. Alors, je vais me limiter à exposer les idées.

mardi 10 septembre 2013

Lire un fichier XML

Lire un fichier XML

Exemple en visual basic

Voici un exemple de code pour lire un fichier XML de base. Il emploie l’objet XmlTextReader pour passer à travers les éléments. Le code utilise aussi XmlNodeType pour différencier les types d’informations contenues dans le fichier XML.
Le code est simple pour mieux illustrer l’exemple. Il possède des éléments de protection de base. Il vérifie si le fichier existe et le conserve dans un objet de type FileInfo. Un objet de type FileInfo peut être plus pratique pour obtenir la taille du fichier et d’autres informations pertinentes au cas où la lecture de fichiers devait échouer.

lundi 26 août 2013

Fermer une WinForm avec ESC.

Fermer une WinForm avec ESC en Visual Basic

Close WinForm
Comment fermer un formulaire en VB avec Echappe ? C’est très simple et voici le code :


Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp

        If e.KeyCode = Keys.Escape Then
            Me.Close()
        End If

End Sub


Visual basic est un langage de programmation très populaire et c’est important de faire des programmes complets. Ceci inclue des interfaces usagers complets.
Ajouter des fonctions pour annuler et pour quitter dans tous vos programmes pour augmenter la qualité de vos projets en informatique.

mercredi 21 août 2013

Excel VBA pour débutant

Excel VBA pour débutant

WorkSheet et Cells dans Excel avec VBA


Construire une macro dans Excel avec VBA est facile si vous connaissez l’essentielle:

Fichier Excel -> Excel Sheet -> Excel Cell.

Lorsque vous travaillez directement dans l’éditeur VBA de Excel, vous n’avez pas à vous préoccuper du fichier Excel puisqu’elle est chargée avec l’application Excel.

Voici une vidée sur Toutube qui fait afficher le WorkSheet Name avec VBA.



mardi 20 août 2013

Afficher les imprimantes

Afficher les imprimantes

Obtenir toutes les imprimantes installées sur un ordinateur


Voici le code informatique le plus court possible pour afficher toutes les imprimantes installées sur un ordinateur local.

avec Visual Basic
Imports System.Drawing.Printing

'[...]

For index1 = 0 To PrinterSettings.InstalledPrinters.Count
      MsgBox(PrinterSettings.InstalledPrinters.Item(index1))
Next



mercredi 31 juillet 2013

Trier les TextBox par position en VB

Trier les TextBox par position en VB


Trier un TextBox selon la position à l’intérieur d’une Winform  n’est pas une fonctionnalité disponible à l’intérieur de Visual Basic ou de Visual Studio.  Depuis longtemps, j’ai dû repositionner les TextBox à la main. Parfois j’ai changé la valeur de la propriété TabIndex à l’intérieur de chaque TextBox. C’était un cauchemar et une vraie perte de temps. Alors, j’ai décidé de programmer un code informatique pour tous les lecteurs de ce blogue.
Je n’ai pas fabriqué un code informatique trop compliqué. Le code est suffisamment efficace pour des quantités normales de TextBox dans une Winform. Si votre Winform contient plus de 100 TextBox, vous devriez considérer un algorithme plus efficace pour le tri des valeurs.

mardi 16 juillet 2013

Installation de Windows 8.1 Preview sur VirtualBox

Installation de Windows 8.1 Preview sur VirtualBox

 Windows 8.1 Preview est un système d’exploitation gratuit pour des fins de tests. Essayez-le gratuitement avant de vous procurer la version commerciale d’ici la fin de l’année 2013.

Si le fait d’essayer Windows 8 vous suffit d’acheter la mise-à-jour, clique sur Microsoft Windows 8 - Upgrade sur Amazon pour vous la procurer.

Un  chapitre sur la préparation de VirtualBox pour Windows 8 est disponible ici : Installation de Windows 8.1 Preview sur VirtualBox
Sans plus tarder, voici les étapes pour l’installation de Windows 8.1 Preview.

mercredi 3 juillet 2013

Installation de Windows 8.1 Preview sur VirtualBox

Installation de Windows 8.1 Preview sur VirtualBox


Windows 8 Je veux tester Microsoft Windows 8.1 Preview x64 sur le VirtualBox d’Oracle pour plusieurs raisons. La première est qu’il n’existera aucune mise-à-jour après que la période d’essai. Aussi, il ne sera pas possible d’installer de version commerciale à partir d’un Windows 8.1 Preview. Si par contre, vous avez un ordi physique disponible, alors allez-y.

Si vous n’avez pas la version ISO de l’installateur, je vous suggère de vous le procurer ici : http://windows.microsoft.com/fr-fr/windows-8/preview-download


Configuration VirtualBox:

Aux fins de test, j’ai décidé d’avoir la configuration suivante :

Processeur : 4 coeurs
RAM : 1024 Mo
Carte Vidéo : 128 Mo avec accélération 2D
Contrôleur IDE pour simuler un DVD-Rom 
Contrôle SATA : un disque 40 Go (minimum 25 Go)
Carte de son : (selon votre ordinateur physique hôte)

J’ai choisi de créer un disque de taille dynamique de 40 Go sachant très bien après l’installation, il va m’en rester environ 15 Go. Sachez aussi qu’il n’est pas nécessaire d’ajouter beaucoup de RAM ou d’autres valeurs si ce n’est que pour des tests. La seule chose que j’ai voulu choisir dès le début est la présence des 4 processeurs. De nos jours,

Windows 8 in VirtualBox
Ajoutez un répertoire à partager pour facilement transférer des fichiers entre l’ordinateur hôte et l’ordinateur virtuel Windows 8.1 Preview. Pour ce test, j’utilise mon répertoire TEMP de mon disque durs C.

Pour une des rares fois, j’ai une illustration provenant d’un VirtualBox en français.
Dossier partagé VirtualBox

Sous l’option système, accédez aux options de processeur. Assurez-vous que l’option PAE/NX est activée. Windows 8 a besoin de s’installer sur des processeurs possédant cette fonctionnalité : [LINK : Install Windows 8]
Processeur dans VirtualBox

Démarrer votre ordinateur virtuel lorsque vos configurations sont terminées.

Important :


Si vous voyez au début le message d’erreur suivant :

Your PC needs to restart.
Please hold down the power button.
Error Code L 0x000000C4
Parameters:
0x0000000000000091
0x000000000000000F
0xFFFFF802A17BDA80
0x0000000000000000

Ceci veut dire qu’il faut faire une opération pour que VirtualBox puisse accepter l’installation de Windows 8.1 Preview. Il suffit de lancer la commande suivante :

“C:\Program Files\Oracle\VirtualBox\VBoxManage.exe” setextradata “Windows81” VBoxInternal/CPUM/CMPXCHG16B 1

“Windows81” (avec la présence des guillemets)  est le nom de l’ordinateur virtuel dans VirtualBox. Remplacez-le en conséquence. Si la commande n’est pas reconnue malgré après avoir bien orthographié la commande, essayer SANS les guillemets.
Ne me demander ce que cette commande fait, lisez le lien qui explique mieux cette ligne de commande.





Lorsque vous aurez complété la configuration initiale dans VirtualBox, vous pourriez démarrer l’ordinateur virtuel.


Installation Windows 8.1 Preview


Si vous utiliser VirtualBox pour essayer ou installer Windows 8.1 Preview, gardez en tête que le bouton qui vous permet de basculer entre l’ordinateur virtuel à l’ordinateur hôte est le bouton CTRL situé à droite le plus à droite du clavier.
Installation Windows 8.1 Preview

J'utilise actuellement sur un de mes ordinateurs de bureau Windows 8 pour certains projets. Je vous suggère d’acheter la mise à jour Windows 8 pour profiter des nombreuses applications disponibles dans cette nouvelle version : Microsoft Windows 8 - Upgrade sur Amazon


dimanche 30 juin 2013

Télécharger Windows 8.1 Preview gratuitement

Télécharger Windows 8.1 Preview gratuitement


Il y a trois jours, Microsoft a lancé une nouvelle version de Windows 8, soit Windows 8.1 Preview. Cette version développée pour les développeurs contient essentiellement des améliorations à la suite de nombreux commentaires de la version Windows 8 originale. L’une des particularités les plus marquantes est le retour du bouton démarrer. Enfin !
Si vous désirez essayer cette nouvelle version de Windows 8.1 Preview, sachez que vous pouvez le télécharger gratuitement. Attention, cette version ne possède pas de désinstallation ni de restauration. Gardez en esprit que c’est une version BETA et que la version commerciale sera disponible qu’en fin 2013. Aussi, aucune mise-à-jour de la version 8.1 Preview vers la version régulière 8.1 n’est prévue par le géant Microsoft.



Acheter d’Amazon la mise-à-jour de Windows 8:

vendredi 28 juin 2013

Télécharger le nouveau Windows 8.1 Preview

Télécharger le nouveau Windows 8.1 Preview


Bonjour à tous, je suis actuellement en train de télécharger la nouvelle version de Microsoft Windows 8.1 Preview. Je vais tester la version anglaise en premier lieu et ensuite évaluer la version française. Si j’ai du temps, je testerai les versions allemande et espagnole avec le Language Pack.
À bientôt.

Windows 8.1 Preview sur MSDN

 Soyez les premiers l'essayer!

vendredi 14 juin 2013

Comment utiliser le clavier pour la reconnaissance vocale de Google

Comment utiliser le clavier pour la reconnaissance vocale de Google

Avec Google Chrome seulement, à partir d’une page de recherché Google, effectuer la recherché avec la reconnaissance vocale avec le clavier. Donc plus besoin de prendre votre souris et d’enfoncer le minuscule bouton situé complètement à droite du TEXTBOX. Appuyer et maintenir enfoncer CTRL+SHIFT+ “point” et commencer à parler en anglais si vous êtes sur GOOGLE.COM

Si vous désirez parler en français, sachez que ça fonctionne. Aller sur GOOGLE.FR
La reconnaissance vocale a besoin de pratique et doit aussi s’adapter aux différentes régions ou dialectes. J’imagine qu’à force de l’utiliser, le produit deviendra meilleur avec le temps. J’ai testé l’allemand et le chinois. J’ai perdu mon temps pour vous, car la machine n’est pas assez futée pour reconnaitre un seul mot de ce que j’ai dit.
Si vous êtes comme moi qui fonctionne avec plus d’une langue, sachez que vous pouvez paramétrer la langue par défaut en suivant les étapes suivantes :


Aller dans  Search Settings -> Languages ->
Ou si vous l’avez dans une autre langue: Paramètres de recherches -> Langues

Assurez-vous que vous avez autorisé le logiciel à accéder à votre microphone.

mardi 4 juin 2013

Recherche Registre en VB.NET

Recherche Registre en VB.NET

Comment tout savoir ce qu'il faut savoir dans l'utilisation des registres de Windows en programmation (VB.NET)? Cette page contient un programme exemple pour lire et rechercher des valeurs dans les clefs de registre dans Windows. Cet exemple codé avec Visual Studio comporte le code source complet avec des explications sur les principaux sujets ainsi que les difficultés les plus habituelles rencontrées par les programmeurs ou les utilisateurs.
On m'avait dernièrement posé la question à savoir si j'étais capable de faire XYZ opérations dans les registres. J'ai évidemment répondu que oui sans lui mentionner les multiples choses à penser pour produire un produit de qualité.

Qu'est-ce qu'une clef de registre?

Une réponse simple à la question serait que ce sont des données hiérarchisées et disponibles en utilisant le programme REGEDIT. Les données situées les registres sont utiles au fonctionnement de plusieurs programmes et le bon fonctionnement de Windows. Les données sont organisées  principalement avec les clefs suivantes :
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG

Deux des principales difficultés à l'utilisation de ces registres sont les problèmes de lecture et d'écritures causées par les ennuis de droits ou de permissions. Aussi, un gros problème pour les programmeurs informatiques est l'accessibilité des registres sous HKEY_LOCAL_MACHINE \SOFTWARE ou HKEY_CURRENT_USER \SOFTWARE lorsque vient le temps de fonctionner avec des programmes fonctionnant en 32 bits ou 64 bits. La difficulté devient ainsi multipliée par deux lorsque le système d'exploitation Windows est en mode 32 bits ou en mode 64 bits. En effet, si un programmeur développe un programme peut obtenir des données erronées s'il accède aux registres. Cela se produit typiquement aux programmeurs qui ne sont pas capables de travailler avec les technologies en 32 bits et simultanément en 64 bits.
Mais passons aux choses sérieuses, je vais tenter de décortiquer quelques thèmes quant à lecture de registre dans cet article et je vais fournir gratuitement un petit programme exemple avec son code source gratuitement. Je suis désolé si je ne peux pas discuter de tous les thèmes parce qu'autrement, j'écrierai un roman.

32 bits ou 64 bits


Il est très important de comprendre qu'il existe 2 types d'architecture disponible pour les processeurs en circulation : les processeurs en 32 bits et les processeurs en 64 bits.  La notion de multicœurs n'est pas importante dans le cas des registres parce que les processeurs multicœurs existent dans les 2 formats.
Voici une liste non exhaustive de processeurs disponibles en magasin à l'heure actuelle fonctionnant avec des processeurs 32 bits et 64 bits respectivement :
Processeurs à instruction à 32 bits :
Intel® Atom™ Processor
Intel Core 2 (1st generation)
Intel Pentium 4
Virtual Computer

Processeurs à instruction à 64 bits :
INTEL CORE i7-3630QM
AMD FX-8150
AMD E2-1800
INTEL CORE i5-3210M
Le principal problème est que même si les processeurs à architecture de 64 bits étaient disponibles au grand marché depuis 1999 avec les produits AMD tel que le AMD ATHLON 64 (1999) ou le ATHLON 64 X2 (DUAL-CORE 64 bits 2005), les grands génies en software n'ont pas suivi avec le hardware. Pensons un instant à Intel qui a commercialisé les premiers processeurs multi-cœurs, très peu de logiciels étaient capables de fonctionner en multicœur.
Conséquemment, les systèmes d'exploitations 64 bits de Microsoft n'étaient pas accessibles jusqu'en 2008 avec l'apparition de Windows 7 Release Candidate (RC). Les autres versions avant Windows 7 RC sont marginales et compliquent la vie des éditeurs de logiciels. Je parle de Windows XP 64, Windows Vista x64 et Windows Server 2008 x64.

Étant donné que le marché a été très lent à s'adapter au 64 bits et que beaucoup de logiciel se reposent sur les registres pour fonctionner, Microsoft a décidé de fabriquer et de dupliquer l'ensemble de ses librairies et de ses registres pour accommoder tout le monde. Après, nous nous demandons pourquoi Windows ne cesse de devenir de plus en plus gros (sic !).

Software vs Wow6432Node

Il n'est pas facile de se retrouver dans le fonctionnement des registres entre le système d'exploitation et les logiciels. Les logiciels peuvent être compilés en 32 ou 64 et il en est de même pour les systèmes d'exploitation qui les reçoivent. Pour m'aider à comprendre et à me souvenir du fonctionnement de registre entre logiciels et systèmes d'exploitation, je garde la formule suivante :
Tu choisis le bon logiciel à installer selon le Windows.

Autrement dit, si ton Windows est en 32, tu installes des logiciels en 32. Si au contraire ton Windows est en 64, tu installes du 64. Pardonnez-moi si ce n'est pas clair.
Si par contre, tu installes un logiciel en 32 sur un ordinateur en 64, alors le logiciel est en  retard sur la norme.  Microsoft a créé un répertoire spécial pour les logiciels retardés qui  fonctionnent en 32 sur les systèmes d'exploitation en 64. Ainsi lors de l'installation d'un logiciel retardé, Windows le détecte et place tous les registres retardés dans le Wow6432Node (pour Windows On Windows 64 to 32 NODE, en français : Nœud Windows à  Windows 64 vers 32).
En pratique cela se traduit par les exemples suivants :

Si votre système d'exploitation est un 32 bits, alors par exemple votre HKEY_LOCAL_MACHINE \SOFTWARE contiendra vos registres pour les logiciels 32 bits.

Si votre système d'exploitation est un 64 bits, alors par exemple votre HKEY_LOCAL_MACHINE \SOFTWARE contiendra vos registres pour les logiciels 64 bits et les HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node contiendront les registres pour les logiciels en 32 bits.

Donc, si vous installez un vieux logiciel des années Windows XP en 32 bits sur un Windows 7 en 64 bits, il y a de grandes chances que les registres de ce vieux logiciel se retrouvent dans HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node automatiquement. En effet, Windows 7 x64 va automatiquement rediriger les demandes d'écriture de registre à cet endroit.

Par contre, il faut faire très attention lorsque vous êtes un jeune programmeur ou si vous décider de programmer sans vous soucier entre les versions 32 et 64 bits. Lorsque vous décidez de lire ou d'écrire des clefs de registres, éviter à tout prix d'utiliser des noms de sous clé absolus avec l'utilisation du mot clef Wow6432Node. Vous allez sérieusement limiter le fonctionnement de votre programme lorsque vous tenteriez d'installer votre programme sur un ordinateur différent. L'idéal, si vous êtes nulle en programmation ou bien si vous ne voulez pas trop faire d'effort pour créer un programme accessible pour tout le monde, alors programmer et compiler des logiciels ou librairies en 32 bits. Microsoft a pensé aux gens comme vous depuis les années 2000 qui ne sont pas capables de faire de saut en 64 bits. Un programme en 64 bits ne fonctionnement tout simplement pas sur un ordinateur 32 bits.

J'ai produit un exemple de programme qui permet d'explorer les registres semblables a ce que REGEDIT peut faire, c'est-à-dire avec l'utilisation d'une arborescence. Vous constaterez que j'ai ajouté 2 choix de présentations des registres Windows: une version 32 bits et une autre en 64 bits. En regardant le code source que j'ai inclus dans ce chapitre, vous constateriez que la clef Wow6432Node utilisée comme exemple n'est pas une clef appartenant à SOFTWARE mais bien à HKEY_LOCAL_MACHINE. Autrement dit, les registres ne sont pas organisés de la même façon pour un logiciel versus l'explorateur dans REGEDIT.
La partie de code dans mon programme pertinent à ce chapitre est le suivant :

            If rb32BitsView.Checked Then
                oBaseKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, tbComputerName.Text, RegistryView.Registry32)
            Else
                oBaseKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, tbComputerName.Text, RegistryView.Registry64)
            End If


Selon le code présenté, vous comprenez que la méthode pour accéder aux registres est exactement la même. Il suffit de préciser laquelle des versions des registres désirons-nous travailler. Pour effectuer une bonne pratique, tout programmeur-analyste qui sollicite l'utilisation des registres Windows doit impérativement se soucier du type de registres auxquelles ils doivent travailler.

GetSubKey  et GetValues

Les registres fonctionnement semblablement aux fichiers et répertoires Windows à la différence que les registres contiennent de petits fichiers de données et que l'autre peut contenir de fichiers plus volumineux par exemple des fichiers vidéo ou de photos. Les registres sont donc composés de clefs et de valeur équivalente à des répertoires et de fichiers.
Donc, pour être capable de lire les données dans les registres, il faudra utiliser la méthode GetSubKey et GetValues pour justement accéder aux sous-clefs et valeurs contenus dans une clef.


        Dim sGetSubKeyNames() As String ' 1st level of Key
        Dim oRegistryKey As RegistryKey
        Try

    '[ . . .]
            sGetSubKeyNames = oRegistryKey.GetSubKeyNames()
    '[ . . .]



En DOT NET, la méthode retourne un tableau de chaîne de caractères contenant les noms de clefs sous une clef de registre. Le tableau est vide lorsqu'il n'existe aucun résultat.  Vous obtenez un code d'erreur lorsque vous tentez d'accéder à un registre avec des autorisations restreintes. Par exemple,  si vous appelez la méthode GetSubKey sur HKEY_LOCAL_MACHINE\SECURITY

La lecture de registres fonctionne de la même façon que pour l'écriture. D'où la raison que je n'ai pas créé une section sur le sujet.

Explorateur de Registres


Le programme REGEDIT de Microsoft est un excellent outil pour explorer dans les registres. On peut même accéder aux ordinateurs à distance, exporter des registres, importer de registres, lire les permissions des clefs de registres, modifier des permissions dans les registres, et cetera.
J'ai produit un programme et le code source est disponible à la fin de cet article. Le programme permet à partir de sa première fenêtre d'accéder aux registres à travers une arborescence de type TREEVIEW en 32 bits ou en 64 bits.  Le fonctionnement de nœud est relativement simple et efficace. Il s'agit à partir d'un nœud de lire tous les sous-clefs et de les insérer dans le Nœud courant de la TREEVIEW. Ensuite, pour des raisons de présentation, le programme détermine la présence de sous-clef dans chacun des sous-clefs du nœud de départ produisant ainsi des petits PLUS à côté de nœud de l'arborescence. Voici un extrait du code qui permet d'effectuer cette manœuvre.


  Private Sub LoadRegistry(ByRef oTreeNode As TreeNode, ByRef oRegistryKey As RegistryKey)

        Dim index1 As Integer
        Dim index2 As Integer
        Dim index3 As Integer
        Dim sGetSubKeyNames() As String ' 1st level of Key
        Dim sGetSubKeyNames2() As String '  ' 2nd level of Key
        Dim oRegistryKey2 As RegistryKey
        Dim tempNode As TreeNode
        Dim tempNode2 As TreeNode
        Dim found As Boolean
        Dim found2 As Boolean
        Try 'this is important because you might not be able to access registry
            'Exemple : HKEY_LOCAL_MACHINE\SECURITY
            sGetSubKeyNames = oRegistryKey.GetSubKeyNames()

            For index1 = 0 To sGetSubKeyNames.Length - 1 Step 1
                'unfortunally i don't have a AddRange from String Array to TreeNode Array :-( tooooo bad
                Try
                    tempNode = New TreeNode(sGetSubKeyNames(index1))
                    found = False
                    For Each fNode As TreeNode In oTreeNode.Nodes
                        If fNode.Text = sGetSubKeyNames(index1) Then
                            found = True
                            Exit For
                        End If
                    Next
                    If found = False Then
                        oTreeNode.Nodes.Add(tempNode)
                    End If
                Catch ex As Exception

                End Try

            Next


            'seulement préchercher les directory immédiats suivantes
            'This will only look the next level of Keys , creating plus signs next to the Nodes.
            For index1 = 0 To sGetSubKeyNames.Length - 1 Step 1

                Try
                    oRegistryKey2 = oRegistryKey.OpenSubKey(sGetSubKeyNames(index1))
                    sGetSubKeyNames2 = oRegistryKey2.GetSubKeyNames()
                    For index2 = 0 To sGetSubKeyNames2.Length - 1 Step 1
                        'unfortunally i don't have a AddRange from String Array to TreeNode Array :-( tooooo bad
                        tempNode2 = New TreeNode(sGetSubKeyNames2(index2))
                        found2 = False
                        For Each fNode As TreeNode In oTreeNode.Nodes(index1).Nodes
                            If fNode.Text = sGetSubKeyNames2(index2) Then
                                found2 = True
                                Exit For
                            End If
                        Next
                        If found2 = False Then
                            oTreeNode.Nodes(index1).Nodes.Add(tempNode2)
                        End If

                        'If Not oTreeNode.Nodes(index1).Nodes.Contains(tempNode2) Then
                        'the basic Contains methods inside the node is not reliable
                        '    oTreeNode.Nodes(index1).Nodes.Add(tempNode2)
                        'End If
                    Next
                Catch ex As Exception

                End Try

            Next
       Catch ex As Exception
            'MsgBox(ex.Message)
        End Try

    End Sub


Il est clair et certain que le code aurait pu être optimisé. Par exemple, il n'est pas nécessaire de collectionner tous les sous-clés en dessous d'une sous-clé  si c'est simplement pour savoir si un PLUS doit exister ou non.  La lecture d'un premier élément suffit pour remplir cette condition. Mais j'ai préféré préserver le code ainsi comme exemple.

Youtube demo




Type de KeyValues

Il existe plusieurs types de valeur dans les clefs de registres. Si vous utilise en DOT NET la méthode TOSTRING pour convertir une valeur en un format lisible, vous pourriez obtenir un message d'erreur si le format n'est pas une chaine de caractère ou un nombre normal.  C'est dans le cas d'une valeur en binaire. Ça ne vous donnera pas une belle série de zéros ou de uns. Donc, vous devez vérifier le type de valeur avant de la traiter.

Notez qu'en général, la notion de nombre en décimal ou en hexadécimal n'a pas trop d'importance puisqu'un nombre reste un nombre.

Voici une partie de code disponible dans l'exemple téléchargeable où je traite la valeur selon le type. J'admets que c'est assez idiot comme exemple, mais dans la vie pourquoi faire compliqué lorsqu'on peut faire simple ? Vous connaissez le KISS ? Keep It Simple and Stupid !



If oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.DWord Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.ExpandString Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.MultiString Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.QWord Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.String Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.Binary Then
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.Unknown Then
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.None Then
                            End If




Recherche de valeur KeyValue


Si je désire retrouver une certaine valeur dans les registres et si je n'ai pas indexé les résultats, alors je dois évidemment naviguer à travers l'ensemble ou une sous-clefs de mes registres.  Pour éviter de développer un code informatique avec trop de lignes de codes et qui figerait mon programme durant la recherche de ma valeur, j'ai décidé de construire un THREAD indépendant de mon programme principal et de la faire fonctionner en arrière-plan (BACKGROUND). Ensuite, par principe de lisibilité de code, la fonction en arrière-plan sera récursive. Le degré de difficulté de ce type de fonction est légèrement plus difficile parce qu'elle diffère légèrement d'une récursivité normale à cause des arguments pour le THREAD.

Fonction récursive et THREAD de base


Voici la fonction SEARCH2 incluant la structure myArguments en argument pour le fonctionnement de la fonction appelée récursivement en BACKGROUND. Cette fonction d'être relativement court et relativement efficace pour rechercher dans les registres. Si jamais une recherche respecte les critères la casse et le mot entier, alors la fonction injecte le résultat dans un tableau de type DATAGRIDVIEW. L'animation du formulaire est assurée par l'emploi d'une fonction INVOKE qui affiche le nom du registre courant.


    Structure myArguments
        Public rPath As String
        Public sStringSearch As String
        Public BaseRegistryKey As RegistryKey
        Public View As Microsoft.Win32.RegistryView
        Public MatchCase As Boolean
        Public MatchWholeWord As Boolean
    End Structure


    Private Sub Search2(ByVal oArgs As myArguments)

        Dim oRegistryKey As RegistryKey
        Dim sGetValueNames() As String
        Dim sGetSubKeyNames() As String ' 1st level of Key
        Dim index1 As Integer
        Dim index2 As Integer
        Dim str(DataGridView1.ColumnCount - 1) As String
        Dim add_result As Boolean
        Try
          
            oRegistryKey = oArgs.BaseRegistryKey '.OpenSubKey(oArgs.rPath)

            If oRegistryKey IsNot Nothing Then
                Try
                    UpdateGroupBox2(oRegistryKey.Name)
                    sGetValueNames = oRegistryKey.GetValueNames()
                    For index1 = 0 To sGetValueNames.Length - 1 Step 1

                        ''test add or not

                        add_result = False
                        If oArgs.MatchWholeWord = True Then
                            If sGetValueNames(index1) IsNot Nothing And oArgs.sStringSearch IsNot Nothing Then
                                If sGetValueNames(index1).Length = oArgs.sStringSearch.Length Then
                                    If oArgs.MatchCase = True Then
                                        If InStr(sGetValueNames(index1), oArgs.sStringSearch, CompareMethod.Binary) > 0 Then
                                            '
                                           add_result = True
                                        End If
                                    Else
                                        If InStr(UCase(sGetValueNames(index1)), UCase(oArgs.sStringSearch), CompareMethod.Binary) > 0 Then
                                            add_result = True
                                        End If
                                    End If
                                End If
                            End If
                        Else

                            If oArgs.MatchCase = True Then
                                If InStr(sGetValueNames(index1), oArgs.sStringSearch, CompareMethod.Binary) > 0 Then
                                    add_result = True
                                End If
                            Else
                                If InStr(UCase(sGetValueNames(index1)), UCase(oArgs.sStringSearch), CompareMethod.Binary) > 0 Then
                                    add_result = True
                                End If
                            End If
                        End If


                        If add_result = True Then
                            'MSgBox(sGetValueNames(index1))
                            If oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.DWord Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.ExpandString Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.MultiString Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.QWord Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.String Then
                                str(cValue.Index) = oRegistryKey.GetValue(sGetValueNames(index1)).ToString
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.Binary Then
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.Unknown Then
                            ElseIf oRegistryKey.GetValueKind(sGetValueNames(index1)) = RegistryValueKind.None Then
                            End If
                            str(cComputer.Index) = _ComputerName
                            str(cKeyName.Index) = sGetValueNames(index1)
                            str(cRegistryPath.Index) = oRegistryKey.Name
                           
                            Me.Invoke(New MethodInvoker(Sub() DataGridView1.Rows.Add(str)))
                        Else
                        End If
                    Next
                Catch ex As Exception
                    'MsgBox(ex.StackTrace)
                End Try
                Try
                    sGetSubKeyNames = oRegistryKey.GetSubKeyNames()
                    For index2 = 0 To sGetSubKeyNames.Length - 1 Step 1
                        'La fonction récursive
                        Try
                            oArgs.rPath = oArgs.rPath & "\" & sGetSubKeyNames(index2)
                          
                            oArgs.BaseRegistryKey = oRegistryKey.OpenSubKey(sGetSubKeyNames(index2))
                            Search2(oArgs)
                        Catch ex As Exception

                        End Try

                    Next
                Catch ex As Exception
                    'MsgBox(ex.StackTrace)
                End Try
            End If


        Catch ex As Exception
            'MsgBox(ex.StackTrace)
        End Try

    End Sub


Création d'une clef de registre

Je n'ai inclus de fonction de création de registres dans l'exemple utilisé dans cet article. Règle générale, le principe d'écriture de registre est similaire à la lecture des registres avec l'utilisation de SETVALUE et de CREATESUBKEY.

Conclusion, Téléchargement et Visual Studio


J'utilise Microsoft Visual Studio 2010 pour faire tous mes projets. Je vous suggère d'acheter et d'obtenir le meilleur IDE dans le monde et le plus récent: Microsoft Visual Studio 2012 sur Amazon .
et
télécharger le projet utilisé en exemple: RegistryRecursiveSearchSample.zip
Voici d'autres sujets d'article qui pourraient vous intéresser: