Systray + regedit + icone

Signaler
Messages postés
4
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
4 février 2016
-
Messages postés
4
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
4 février 2016
-
Bonjour,

Je n'arrive pas a trouver un source ou mieux un exe qui me permette de:
- de lire une key registre
- de modifier l'icône systray en fonction de la valeur et de changer la valeur registre

=> ce qui me donne un switch On/Off avec 2 icônes différentes et deux valeurs de registre.

Si vous pouvez m'orienter ... merci à vous.

4 réponses

Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
31
Bonjour,

Oui on peu t'aider mais commence par poster sur le bon forum au moins on connaitra ton langage de prog. ++


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
4
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
4 février 2016

merci pour ta réponse: je suis sous VB 2008.

j'ai commencé à créer une notifyIcon mais il me reste beaucoup a faire ;)

- lire des clef registre
- modifier des clef registre
- ne pas avoir de fenêtre ouverte (seulement un notifyIcon)
- changer l'icône en systray

ps: je suis newbee en VB.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
31
Tu as de la chance, en .Net c'est super simple.

Pour ce qui est du tray, documente toisur le composant 'NotifyIcon', il fait tout le travail.

Pour l'accès au registre, utilises la classe Registry de l'espace de noms Microsoft.Win32. Exemple :

'Ecrit une valeur dans le registre
Microsoft.Win32.Registry.CurrentUser.SetValue("MyAppStartup", "C:\program files\MyApp\MyApp.exe")

'Supprime cette valeur
Microsoft.Win32.Registry.CurrentUser.DeleteValue("MyAppStartup")


Attention, l'application devra posséder les droits d'administrateur déclenche une alèrte UAC sous Vista/Win7.

Je vois que tu cherches aussi à 'lire' les valeurs des clés du registre, si c'est dans le but de stocker des paramètres spécifiques à ton application alors je te conseille plutôt les paramètres d'application.

Et pour masquer le formulaire, un simple Me.Hide suffit.

Voila, @+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
4
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
4 février 2016

Hello et merci ;)

Voila j'ai réussi. comme je ne sais pas poste de projet je vous post le code pour les intéressés:

ps: c'est pas super propre et c'est assez dédier a mon besoin.
psbis: 3 .ico neccessaires pour le projet.

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1

Inherits System.Windows.Forms.Form

Private contextMenu1 As System.Windows.Forms.ContextMenu
Friend WithEvents menuItem1 As System.Windows.Forms.MenuItem
Friend WithEvents menuItem2 As System.Windows.Forms.MenuItem
Friend WithEvents notifyIcon1 As System.Windows.Forms.NotifyIcon
Friend WithEvents Tcle As System.Windows.Forms.ComboBox
Const ICONE_ERROR As String = "error.ico"
Const ICONE_2 As String = "Head.ico"
Const ICONE_1 As String = "Hifi.ico"
Const KEY_1 As String = "Realtek HD Audio output"
Const KEY_2 As String = "Logitech USB Headset"
Const KEY_NAME As String = "Software\Microsoft\Multimedia\Sound Mapper"
Const KEY_CHAINE As String = "Playback"
Const NAME_APPLI As String = "Selectionneur de sortie AUDIO"
Const NAME_ERROR As String = "ERREUR DE REGISTRE"


' Private components As System.ComponentModel.IContainer

<System.STAThread()> _
Public Shared Sub Main()
System.Windows.Forms.Application.Run(New Form1)

End Sub 'Form1


Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
' Clean up any components being used.
If disposing Then
If (components IsNot Nothing) Then
components.Dispose()
End If
End If

MyBase.Dispose(disposing)
End Sub 'Dispose


'****MOdifie la valeur d'une clé de registre en passant en parametre la nouvelle valeur
Private Sub ModifieVALCle(ByVal cle As String, ByVal NewValeur As String)
Dim Reg As Microsoft.Win32.RegistryKey
'ouvre la clé avec accès en écriture
Reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(cle, True)
'modifie la valeur
Reg.SetValue(KEY_CHAINE, NewValeur)
'ferme la clé
Reg.Close()
'MsgBox("Modification effectué", MsgBoxStyle.OKOnly, "Modification d'une donnée")

End Sub 'ModifieVALCle

'****met a jour la liste des valeurs pour la clé passée en parametre
'***et retourne le nombre de valeurs associées a la clé
Private Function RetourneValeur(ByVal Cle As String) As String
'ouvre la clé du Registre
Dim Reg As Microsoft.Win32.RegistryKey
Reg = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Cle)
'obtient le nombre de valeur associé a la clé
If Not IsNothing(Reg) Then
RetourneValeur = Reg.GetValue(KEY_CHAINE)
'ferme la clé
Reg.Close()
Else
RetourneValeur = "error"
End If
End Function 'RetourneValeur


Private Sub notifyIcon1_DoubleClick(ByVal Sender As Object, ByVal e As EventArgs) Handles notifyIcon1.DoubleClick
' Show the form when the user double clicks on the notify icon.

Dim KeyValue As String

'read the KEY registre
KeyValue = RetourneValeur(KEY_NAME)

If (KeyValue = KEY_1) Then

' The Icon property sets the icon that will appear
' in the systray for this key value.
notifyIcon1.Icon = New Icon(ICONE_2)
ModifieVALCle(KEY_NAME, KEY_2)

ElseIf (KeyValue = KEY_2) Then
' The Icon property sets the icon that will appear
' in the systray for this key value.
notifyIcon1.Icon = New Icon(ICONE_1)
ModifieVALCle(KEY_NAME, KEY_1)
Else

notifyIcon1.Icon = New Icon(ICONE_ERROR)

End If

End Sub 'notifyIcon1_DoubleClick

Private Sub menuItem1_Click(ByVal Sender As Object, ByVal e As EventArgs) Handles menuItem1.Click
' Close the form, which closes the application.
Me.Close()
End Sub 'menuItem1_Click

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim KeyValue As String

Me.components = New System.ComponentModel.Container
Me.contextMenu1 = New System.Windows.Forms.ContextMenu
Me.menuItem1 = New System.Windows.Forms.MenuItem

' Initialize contextMenu1
Me.contextMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() _
{Me.menuItem1})

' Initialize menuItem1
Me.menuItem1.Index = 0
Me.menuItem1.Text = "E&xit"

' Set up how the form should be displayed.
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Text = NAME_APPLI

' Create the NotifyIcon.
Me.notifyIcon1 = New System.Windows.Forms.NotifyIcon(Me.components)

' The Icon property sets the icon that will appear
' in the systray for this key value.
' The Text property sets the text that will be displayed,
' in a tooltip, when the mouse hovers over the systray icon.
notifyIcon1.Visible = True
KeyValue = RetourneValeur(KEY_NAME)

If (KeyValue = KEY_1) Then
notifyIcon1.Icon = New Icon(ICONE_1)
notifyIcon1.Text = NAME_APPLI
ElseIf (KeyValue = KEY_2) Then
notifyIcon1.Icon = New Icon(ICONE_2)
notifyIcon1.Text = NAME_APPLI
Else
notifyIcon1.Icon = New Icon(ICONE_ERROR)
notifyIcon1.Text = NAME_ERROR
End If

' The ContextMenu property sets the menu that will
' appear when the systray icon is right clicked.
notifyIcon1.ContextMenu = Me.contextMenu1


Me.Hide()


End Sub 'Form1_Load


End Class