Modifier une valeur du registre

Fermé
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 - 11 déc. 2012 à 20:10
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 - 8 janv. 2013 à 20:13
Bonjour tout le monde!

Je travaille actuellement sur un logiciel capable de modifier le fond d'écran de démarrage. Donc voilà, pour Windows "autorise" la modification du fond d'écran de démarrage, il faut modifier une valeur du registre, celle-ci:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground

Il faut que cette valeur soit une hexadécimale égale à 1, petit screen:

http://data.imagup.com/member2/1169896437_aidevb.jpg

Et voilà le code qui doit passer cette valeur vers une hexadécimale égale à 1:

        

Imports Microsoft.Win32 'pour utiliser le registre 

 Try    
            Dim regOEMBackground As RegistryKey    

            Dim keyValue As String    
            keyValue = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\\Background"    
            regOEMBackground = (Registry.LocalMachine.OpenSubKey(keyValue, True))    

            regOEMBackground.SetValue("OEMBackground", 1)    

            Dim getOEMBackgroundValue As Integer = 0    
            getOEMBackgroundValue = regOEMBackground.GetValue("OEMBackground", 0)    
            regOEMBackground.Close()    

            TextBox1.Text = getOEMBackgroundValue.ToString    

        Catch ex As Exception    
            MsgBox(ex.ToString)    
        End Try


Mais après l'exécution de ce code, la valeur n'est pas modifié, j'ai regardé avec RegEdit. Quelqu'un pourrait il m'aider s'il vous plait? Me dire quelle est l'erreur dans mon code ou comment faire pour modifier une valeur du registre? Merci beaucoup!




A voir également:

7 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
12 déc. 2012 à 19:10
Bonjour,
Pour modifier le fond d'écran j'emploi (en VB6) la procédure suivante.
Public Function ChangeFondEcran(FichierImage As String, Optional AffiType As Integer = 2)

Dim Txt1 As String, Txt2 As String
Dim R As Long
Dim hand As Long
    ' Gestion de l'erreur si pas d'image
    On Error GoTo Fin
' Mettre les options dans les régistres
   Select Case AffiType
   Case 0 ' Centrer
       Txt1 = "0": Txt2 = "0"
   Case 1 ' Mosaïque
        Txt1 = "0": Txt2 = "1"
    Case 2 ' Etirer
        Txt1 = "2": Txt2 = "0"
    End Select
   R = RegCreateKey(HKEY_CURRENT_USER, "Control Panel\Desktop", hand)
   R = RegSetValueEx(hand, "WallpaperStyle", 0, REG_SZ, ByVal Txt1, Len(Txt1))
   R = RegCloseKey(hand)
'Exit Function
   R = RegCreateKey(HKEY_CURRENT_USER, "Control Panel\Desktop", hand)
   R = RegSetValueEx(hand, "TileWallpaper", 0, REG_SZ, ByVal Txt2, Len(Txt2))
   R = RegCloseKey(hand)
   
    SystemParametersInfo SPI_SETDESKWALLPAPER, 0&, FichierImage, SPIF_UPDATEINIFILE Or _
    SPIF_SENDWININICHANGE
Fin:
End Function

où AffiType est le paramètre pour le mode d'affichage, Étirer, Image ou mosaïque.
Tu devrais facilement retrouver les API, sinon tu dis je te les passerais en VB6
Si ça peu t'aidé !
A+

0
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 14
14 déc. 2012 à 18:37
Je vais regarder ton code! Merci pour ton aide! :)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
15 déc. 2012 à 06:39
Je pense à autre chose...
Clic droit sur l'icone de Visual Basic -> ouvrir en tant qu'administrateur.
Ensuite tu charge ton appli et tu l'exécute.

Note : pour modifier une clé registre faut être inscrit comme admin.
0
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 14
15 déc. 2012 à 10:46
J'ai déjà essayé d'executer en tant qu'admin ça n'y fait rien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
Modifié par lermite222 le 15/12/2012 à 12:35
Bon, j'ai un peu examiner le truc...
Ta fonction OpenSubKey ouvre une clé notamment la clé "Background"
Mais au départ elle n'existe pas, faut donc la créer, la fonction CreateSubKey crée la clé si elle n'existe pas et l'ouvre.
Ainsi la clé est créée et validée, le textbox renvoi bien la valeur.
 regOEMBackground = (Registry.LocalMachine.CreateSubKey(keyValue))

A+


Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 14
17 déc. 2012 à 19:02
Excuse moi si je t'ai pas répondu assez tôt! J'ai vus que tu m'a fait remarqué cette erreur dans un autre sujet. Ce n'est pas un problème de politesse c'est juste que je n'avais pas vu ton post. Alors j'ai regardé ton code, mais à la base, cette clé existe déjà et ne devrai pas avoir à être créé. Mis je vais essayer ton code dans deux ou trois tests, et je te dirait ce que ça me donne au plus vite!
0
Lyc@n Messages postés 221 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 14
8 janv. 2013 à 20:13
J'ai essayé ca:
                    Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background")

If My.Computer.Registry.GetValue(RegKey, "OEMBackground", "None") = "0" Then
   My.Computer.Registry.SetValue(RegKey, "OEMBackground", "1", RegistryValueKind.DWord)
End If


Mais là le programme à un comportement très étrange, il fait comme si le registre était modifié alors qu'il n'a pas bougé, quelqu'un aurais une idée s'il vous plait? Merci!
0