Nash a écrit :re
sans l'execption si la clé existe : sur clique bouton apres avoir choisi exe par openfiledialog qui a mis le chemin dans textbox1 et le nom dans label1:
nom = Me.Label1.Text
Key = My.Computer.Registry.ClassesRoot.CreateSubKey("DesktopBackground\shell\" & nom & "\command\")
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\DesktopBackground\shell\" & nom & "\command\", "", Me.TextBox1.Text)
My.Computer.Registry.SetValue("HKEY_CLASSES_ROOT\DesktopBackground\shell\" & nom & "\\", "icon", Me.TextBox1.Text)
apres encore une ligne pour "bas , haut , milieu"
+ 1 ligne pour verification si clé existe
et pas de prob , ca marche tres bien ...
Quand je parle d'exception c'est "Try...Catch...ex...end try" et non une conditionnel "If ...end if".
Lorsque tu écris des valeurs dans le registre je te conseil d'utiliser la gestion d'exceptions ca évitera à l'utilisateur d'avoir des fenêtres de quelconques erreurs du framework.
Ton code peut sembler fonctionner mais de ce que je peux lire il n'en découle aucune logique puisque tu utilises des variables non typées et de plus tu ne les utilises pas.
Voilà à quoi doit ressembler la création d'un menu contextuel au clic droit :
Code : Tout sélectionner
Try
'déclaration d'une variable de type "clé de registre" nommée "Key" et initialisée à "Nothing"
Dim Key As RegistryKey = Nothing
'création de la sous clé de registre puis affecation dans la variable "Key"
Key = Registry.ClassesRoot.CreateSubKey(RegPath & "\Shell\NCTD")
'création de la "donnée de valeur" nommée "Lancer NCTD" de la clé "Key"
Key.SetValue("", "Lancer NCTD")
'création de la sous clé "command" puis de la donnée de valeur du "chemin de l'application"
Key.CreateSubKey("command").SetValue("", Application.ExecutablePath)
'création du nom "Icon" et de sa valeur "chemin de l'application" concaténé aux caractères ",0" afin de représenter l'icône du programme
Key.SetValue("Icon", Application.ExecutablePath & ",0")
'création du nom "Position" et de sa valeur "Bottom"
Key.SetValue("Position", "Bottom")
' fermeture des resources mémoire occupées par la variable "Key"
Key.Close()
'Gestionnaire d'exception
Catch ex As Exception
'Message à afficher avec l'exception trouvée (ex.Message)
MessageBox.Show("L'erreur suivante est survenue : " & ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Voilà pour la création de la clé
Mais il ne faut pas perdre de vue que ce code peut être réutilisé pour créer un menu contextuel selon la valeur de la variable sélectionnée par l'utilisateur : "Top, Center, Bottom" donc tu peut créer une procédure qui nécessite de lui passer cet argument comme ceci :
Code : Tout sélectionner
Public Sub CreateRightClic(ByVal Posit As String)
Try
Dim Key As RegistryKey = Nothing
Key = Registry.ClassesRoot.CreateSubKey(RegPath & "\Shell\NCTD")
Key.SetValue("", "Lancer NCTD")
Key.CreateSubKey("command").SetValue("", Application.ExecutablePath)
Key.SetValue("Icon", Application.ExecutablePath & ",0")
If Not Posit Is Nothing Then
Key.SetValue("Position", Posit)
Else
Key.SetValue("Position", "Bottom")
End If
Key.Close()
Catch ex As Exception
MessageBox.Show("L'erreur suivante est survenue : " & ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
D'autre variables peuvent être ajoutées dans la signature de ta procédure afin de la rendre utilisable pour créer n'importe quel menu contextuel selon :
- le nom de l'item ("Lancer NCTD")
- le nom de la sous clé ("\Shell\NCTD")
- la valeur de l'icône ("Application.ExecutablePath & ",0")
Voilà je te laisse réfléchir pour la création d'une fonction de suppression A+
PS : il ne faut pas se dire chouette ca fonctionne avec du code trouvé à droite et à gauche mais il faut en déduire la logique de raisonnement.
