Modifier une valeur (binaire) dans la base de registre

Résolu/Fermé
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 - 28 sept. 2022 à 19:28
little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 - 28 sept. 2022 à 22:39

Bonjour,

En VB.Net je souhaite créer un script (avec interace), pour pouvoir déplacer la barre des tâches.

Pour cela, je dois modifier une valeur de type binaire dans la base de registre.

Je n'y arrive pas.

Du coup, je suis passé par la création d'un fichier REG et l'import via ce scriot.

Ca fonctionne.

Mais je désire néanmoins comprendre pourquoi je n'y arrive pas.

Voici le code de la fonction :

    Private Sub EnHaut(valeur)

        Dim position = valeur.Remove(0, 2)
        position = Regex.Replace(position, ".{2}", "$0,")
        position = position.Remove(position.Length - 1)

        MsgBox(position)

        Dim uBinary = New Byte() {position} ', System.Globalization.NumberStyles.HexNumber)}

        Dim keys As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRectsLegacy", True)
        keys.SetValue("Settings", uBinary)
        MsgBox("fin")


    End Sub 

Le souci est lié à la syntaxe de "New Byte"

Car si je met en clair, sans mettre de variable déclarée : la valeur est bien modifié dans la base de registre.

En gros, si je met cela, ça fonctionne : Dim uBinary = New Byte() {1,2,3,4,5,6,7,8}

Merci pour vos lumières; je pense qu'elles me seront utiles pour combler cette lacune.

Je ne serais pas si le code complet vous sera utile, mais le voici :

Imports Microsoft.Win32
Imports System.Buffers
Imports System.IO
Imports System.Runtime.Serialization.Formatters
Imports System.Text.RegularExpressions
Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form1

    ReadOnly SSTUCKRECTSHKEY = "HKEY_CURRENT_USER\Softaware\Microsoft\Windows\CurrentVersion\Explorer\StuckRectsLegacy"
    ReadOnly valeur_haut = "0x30000000feffffff02000000010000003e0000001e0000000000000000000000800700001e0000006000000001000000"
    ReadOnly valeur_bas = "0x30000000feffffff02000000030000003e0000001e000000000000001a04000080070000380400006000000001000000"
    ReadOnly valeur_gauche = "0x30000000feffffff02000000000000003e0000001e00000000000000000000003e000000380400006000000001000000"
    ReadOnly valeur_droite = "0x30000000feffffff02000000020000003e0000001e000000420700000000000080070000380400006000000001000000"
    ReadOnly DebutFichierReg = "Windows Registry Editor Version 5.00" & vbCr & "[" & SSTUCKRECTSHKEY & "]" & vbCr & """Settings""=hex:"
    ReadOnly FichierReg As String = System.IO.Path.GetTempPath() & "\FichierReg.reg"

    Private Sub image_haut_Click(sender As Object, e As EventArgs) Handles image_haut.Click
        EnHaut(valeur_haut)
        'BougeTaBarre(valeur_haut)
    End Sub

    Private Sub image_bas_Click(sender As Object, e As EventArgs) Handles image_bas.Click
        BougeTaBarre(valeur_bas)
    End Sub

    Private Sub image_gauche_Click(sender As Object, e As EventArgs) Handles image_gauche.Click
        BougeTaBarre(valeur_gauche)
    End Sub

    Private Sub image_droite_Click(sender As Object, e As EventArgs) Handles image_droite.Click
        BougeTaBarre(valeur_droite)
    End Sub


    Private Sub EnHaut(valeur)

        Dim position = valeur.Remove(0, 2)
        position = Regex.Replace(position, ".{2}", "$0,")
        position = position.Remove(position.Length - 1)

        MsgBox(position)

        Dim uBinary = New Byte() {position} ', System.Globalization.NumberStyles.HexNumber)}

        Dim keys As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRectsLegacy", True)
        keys.SetValue("Settings", uBinary)
        MsgBox("fin")


    End Sub



    Private Sub BougeTaBarre(valeur)

        '' If My.Computer.FileSystem.FileExists(FichierReg) Then My.Computer.FileSystem.DeleteFile(FichierReg)

        Dim position = valeur.Remove(0, 2)
        position = Regex.Replace(position, ".{2}", "$0,")
        position = position.Remove(position.Length - 1)
        Dim ContenuFichierReg = DebutFichierReg & position

        Dim file As New System.IO.StreamWriter(FichierReg, True)
        file.Write(ContenuFichierReg)
        file.Dispose()
        file.Close()

        Dim myProcess As Process = New Process()
        myProcess.StartInfo.UseShellExecute = False
        myProcess.StartInfo.FileName = "regedit.exe"
        myProcess.StartInfo.Arguments = "/s " & Chr(34) & FichierReg & Chr(34) & " & exit"
        myProcess.Start()

        Dim myProcesses() As Process = Process.GetProcessesByName("explorer")
        For Each Process In myProcesses
            Process.Kill()
        Next


    End Sub

End Class

A bientot

Thomas.
Windows / Opera 90.0.4480.117


A voir également:

1 réponse

little boy62 Messages postés 3584 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2024 1 757
28 sept. 2022 à 22:39

Lu"

Résolu.

J'ai trouvé ceci : https://www.vbforums.com/showthread.php?627621-Setting-Registry-Values-with-Binary-Value-Kind&p=3882405&viewfull=1#post3882405

et en effet, ce bout de code m'a aidé :

Dim hexString As String = "1A,2B,3C,4D,5E,6F,70"
Dim bytes As Byte() = hexString.Split(","c).Select(Function(s) Convert.ToByte(s, 16)).ToArray(

J'ai donc fait ceci, comme fonction :

    Private Sub BougeTaBarre(valeur)

        Dim position As String = valeur.Remove(0, 2)
        position = Regex.Replace(position, ".{2}", "$0,")
        position = position.Remove(position.Length - 1)
        Dim bytes As Byte() = position.Split(","c).Select(Function(s) Convert.ToByte(s, 16)).ToArray()
        Dim keys As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRectsLegacy", True)
        keys.SetValue("Settings", bytes)

        Dim myProcesses() As Process = Process.GetProcessesByName("explorer")
        For Each Process In myProcesses
            Process.Kill()
        Next

    End Sub

 Ca fonctionne.

++


0