J'ai plusieurs compte Outlook sous une même identité windows (mes parents et moi)
et c'est une vrai galère ce soft pour changer d'utilisateur.
J'ai bricoler un petit code pour permettre de choisir l'utilisateur au lancement.
Le principe est bete comme chou :
- le programme liste les utilisateurs d'outlook : c'est écrit dans le registre
- Je choisi l'utilisateur
- le programme écrit dans le registre l'utilisateur qui est lancé par défaut pour outlook, puis il lance outlook, qui s'ouvrira avec l'identité choisi.
C'est pas encore finis mais fonctionnel :
Code : Tout sélectionner
; PB4
Structure Identite_Info
Nom.s
ID.s
Defaut.l
EndStructure
Global NewList Identite.Identite_Info()
; On recherche toutes les identitées
Resultat = RegOpenKey_(#HKEY_CURRENT_USER, "Identities", @hKey) ; Clé de registre d'outlook express
If Resultat = 0 ; Si le résultat est égal à 0, on a réussi à ouvrir la clé de registre
n = 0
Taille.l = 255
Nom.s = Space(Taille)
While RegEnumKeyEx_(hKey, n, @Nom, @Taille, 0, 0, 0, 0) <> #ERROR_NO_MORE_ITEMS ; Tant qu'il reste des valeur dans la clé de registre
AddElement(Identite())
Identite()\ID = Nom
; On prépare les variables pour rechercher la valeur suivante dans la clé de registre
n + 1
Taille = 255
Nom = Space(Taille)
Wend
Taille.l = 255
Nom.s = Space(Taille)
Resultat = RegQueryValueEx_(hKey, "Start As", 0, 0, @Nom, @Taille)
If Resultat = 0
Identite_Defaut.s = Nom
EndIf
RegCloseKey_(hKey) ; on ferme la clé de registre ouverte
EndIf
; Pour chaque identitée, on recherche le nom de l'utilisateur
ForEach Identite()
Resultat = RegOpenKey_(#HKEY_CURRENT_USER, "Identities\" + Identite()\ID, @hKey) ; Clé de registre de l'utilisiateur d'outlook express
Identite()\Nom = "Sans identité ( " + Identite()\ID + " )"
If Resultat = 0
Taille.l = 255
Nom.s = Space(Taille)
Resultat = RegQueryValueEx_(hKey, "Username", 0, 0, @Nom, @Taille)
If Resultat = 0
Identite()\Nom = Nom
EndIf
RegCloseKey_(hKey)
EndIf
; Identité par défaut ?
If Identite_Defaut = Identite()\ID
Identite()\Defaut = 1
EndIf
Next
; Création de la fenêtre de lancement
NbIdentite = CountList(Identite())
#Bordure = 5
#Largeur = 250
#Largeur_Interne = #Largeur - 2 * #Bordure
#Hauteur_Titre = 20
#Hauteur_Bouton = 30
If OpenWindow(0, 0, 0, #Largeur, #Hauteur_Bouton * NbIdentite + #Hauteur_Titre + 2 * #Bordure, "Messagerie", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))
LoadFont(0, "Tahoma", 8, #PB_Font_HighQuality)
TextGadget(0, #Bordure, #Bordure, #Largeur_Interne - #Hauteur_Titre, #Hauteur_Titre, "Choisissez votre compte de messagerie", #PB_Text_Center)
SetGadgetFont(0, FontID(0))
ButtonGadget(100, #Largeur - #Bordure - #Hauteur_Titre, #Bordure, #Hauteur_Titre, #Hauteur_Titre, "?")
LoadFont(1, "Tahoma", 9, #PB_Font_Bold | #PB_Font_HighQuality)
SetGadgetFont(#PB_Default, FontID(1))
n = 0
ForEach Identite()
n + 1
If Identite()\Defaut
ButtonGadget(n, #Bordure, #Bordure + #Hauteur_Titre + #Hauteur_Bouton * (n - 1), #Largeur_Interne, #Hauteur_Bouton, Identite()\Nom, #BS_DEFPUSHBUTTON)
Else
ButtonGadget(n, #Bordure, #Bordure + #Hauteur_Titre + #Hauteur_Bouton * (n - 1), #Largeur_Interne, #Hauteur_Bouton, Identite()\Nom)
EndIf
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
; On change l'identité par défaut
IdentiteID = EventGadget()
If IdentiteID = 100
Else
SelectElement(Identite(), IdentiteID - 1)
Resultat = RegOpenKey_(#HKEY_CURRENT_USER, "Identities\", @hKey) ; Clé de registre de l'utilisiateur d'outlook express
If Resultat = 0
RegSetValueEx_(hkey, "Start As", 0, #REG_SZ, Identite()\ID, Len(Identite()\ID) + 1)
RegCloseKey_(hKey)
EndIf
; On lance outlook Express
RunProgram("msimn.exe")
; Fin du programme
End
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf