J'ai regardé un peu avec RegShot pour voir ce qui changeait dans la base de registre.
Au final, voilà ce que j'ai trouvé :
Dans
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 :
- Chaque compte est défini par un numéro, correspondant à une clé dans
9375CFF0413111d3B88A00104B2A6676 (par exemple, 00000004).
- La valeur
{ED475418-B0D6-11D2-8C3B-00104B2A6676} contient l'ordre des comptes Outlook (dans la fenêtre dont tu as fait la capture d'écran)
Dans chaque clé correspondant à un compte (00000004), il y a la valeur Account Name, qui contient le nom du compte. Tu peux lire la valeur comme ça :
► Afficher le texte
Code : Tout sélectionner
$s = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000004", "Account Name")
$s = BinaryToString(StringReplace($s, "00", ""))
MsgBox(0, "", $s)
Une fois que tu as le nom du compte du peux choisir l'ordre, sachant que le premier est celui par défaut.
Voilà donc 2 fonctions, qui fonctionnent chez moi (Office 2010) :
► Afficher le texte
Code : Tout sélectionner
#Include <Array.au3> ; uniquement pour _ArrayDisplay
$aAccounts = _OutlookGetAccounts()
_ArrayDisplay($aAccounts)
_OutlookSetAccountDefault("NomDuCompte")
Func _OutlookSetAccountDefault($vAccount) ; $vAccount peut etre le nom du compte ou son identifiant dans la base de registre
Local $aAccounts
Local $sAccountID = $vAccount
If Not Number($vAccount) Then
$aAccounts = _OutlookGetAccounts()
_ArrayDisplay($aAccounts)
For $i = 1 To $aAccounts[0][0]
If $aAccounts[$i][1] = $vAccount Then
$sAccountID = $aAccounts[$i][0]
ExitLoop
EndIf
Next
If Not Number($sAccountID) Then Return SetError(1, 0, 0)
EndIf
Local $sOrder = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676", "{ED475418-B0D6-11D2-8C3B-00104B2A6676}")
Local $sAccountReverse = StringRegExpReplace($sAccountID, "(\d{2})(\d{2})(\d{2})(\d{2})", "$4$3$2$1")
Local $sNewOrder = StringRegExpReplace($sOrder, "^0x\K((?:\d{8})*)" & $sAccountReverse, $sAccountReverse & "$1")
Local $iRet = RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676", "{ED475418-B0D6-11D2-8C3B-00104B2A6676}", "REG_BINARY", $sNewOrder)
Return SetError(@error, 0, $iRet)
EndFunc
Func _OutlookGetAccounts()
Local $sOrder = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676", "{ED475418-B0D6-11D2-8C3B-00104B2A6676}")
Local $aNums = StringRegExp($sOrder, "\d{8}", 3)
Local $aRet[UBound($aNums) + 1][2]
For $i = 0 To UBound($aNums) - 1
$aRet[$i + 1][0] = StringRegExpReplace($aNums[$i], "(\d{2})(\d{2})(\d{2})(\d{2})", "$4$3$2$1")
$aRet[$i + 1][1] = BinaryToString(StringReplace(RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\" & $aRet[$i + 1][0], "Account Name"), "00", ""))
Next
$aRet[0][0] = UBound($aNums)
Return $aRet
EndFunc
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !