Laboratoire Microsoft |  Blog |  Webcast |  Students Club |  FaqXP  |  CertifExpress 
 Le Forum de Référence sur les Technologies Microsoft - http://www.forum-microsoft.org

signature outlook 2k3: forcer la signature par defaut

Modérateurs: Goran, Modérateurs_Divers

signature outlook 2k3: forcer la signature par defaut

Messagepar jlefay sur Mer 03 Sep 2008, 11:20

Salut,

Si ça inétrésse quelqu'un je vous met ci-joint un code qui vous permet de forcer le nom d'un fichier de signature (defaut.html par exemple) en tant que signature par défaut pour tout les profils Outlook 2003.

Ce code associé au Script VBS (voir mon POST précédent) vous permet de créer une signature personalisable pour votre entreprise.
Dans le principe:

- Script VBS qui créer un fichier .html ou autre avec des infos de l'annuaire AD et le met dans le répartoire par défaut pour la signature.
- Script VBA qui force Outlook à utiliser le nom du fichier .html par défaut pour tout les profils.
Vous pouvez aussi simplement utiliser un .reg pour forcer le nom du fichier de signautre par défaut mais ça n'est pas pareil car si vous crééz un nouveau profil le .reg ne fonctionnera pas.

Voilà je vous met tout ça:

Code VBA


Code: Tout sélectionner
' Use this version to set all accounts
' in the default mail profile
' to use a previously created signature
Call SetDefaultSignature("Signature Name", "")

' Use this version (and comment the other) to
' modify a named profile.
'Call SetDefaultSignature _
'  ("Signature Name", "Profile Name")

Sub SetDefaultSignature(strSigName, strProfile)
    Const HKEY_CURRENT_USER = &H80000001
    strComputer = "."
   
    If Not IsOutlookRunning Then
        Set objreg = GetObject("winmgmts:" & _
          "{impersonationLevel=impersonate}!\\" & _
          strComputer & "\root\default:StdRegProv")
        strKeyPath = "Software\Microsoft\Windows NT\" & _
                     "CurrentVersion\Windows " & _
                     "Messaging Subsystem\Profiles\"
        ' get default profile name if none specified
        If strProfile = "" Then
            objreg.GetStringValue HKEY_CURRENT_USER, _
              strKeyPath, "DefaultProfile", strProfile
        End If
        ' build array from signature name
        myArray = StringToByteArray(strSigName, True)
        strKeyPath = strKeyPath & strProfile & _
                     "\9375CFF0413111d3B88A00104B2A6676"
        objreg.EnumKey HKEY_CURRENT_USER, strKeyPath, _
                       arrProfileKeys
        For Each subkey In arrProfileKeys
            strsubkeypath = strKeyPath & "\" & subkey
            'On Error Resume Next
            objreg.SetBinaryValue HKEY_CURRENT_USER, _
              strsubkeypath, "New Signature", myArray
            objreg.SetBinaryValue HKEY_CURRENT_USER, _
              strsubkeypath, "Reply-Forward Signature", myArray
        Next
    Else
        strMsg = "Please shut down Outlook before " & _
                 "running this script."
        MsgBox strMsg, vbExclamation, "SetDefaultSignature"
    End If
End Sub

Function IsOutlookRunning()
    strComputer = "."
    strQuery = "Select * from Win32_Process " & _
               "Where Name = 'Outlook.exe'"
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" _
        & strComputer & "\root\cimv2")
    Set colProcesses = objWMIService.ExecQuery(strQuery)
    For Each objProcess In colProcesses
        If UCase(objProcess.Name) = "OUTLOOK.EXE" Then
            IsOutlookRunning = True
        Else
            IsOutlookRunning = False
        End If
    Next
End Function

Public Function StringToByteArray _
                 (Data, NeedNullTerminator)
    Dim strAll
    strAll = StringToHex4(Data)
    If NeedNullTerminator Then
        strAll = strAll & "0000"
    End If
    intLen = Len(strAll) \ 2
    ReDim arr(intLen - 1)
    For i = 1 To Len(strAll) \ 2
        arr(i - 1) = CByte _
                   ("&H" & Mid(strAll, (2 * i) - 1, 2))
    Next
    StringToByteArray = arr
End Function

Public Function StringToHex4(Data)
    ' Input: normal text
    ' Output: four-character string for each character,
    '         e.g. "3204" for lower-case Russian B,
    '        "6500" for ASCII e
    ' Output: correct characters
    ' needs to reverse order of bytes from 0432
    Dim strAll
    For i = 1 To Len(Data)
        ' get the four-character hex for each character
        strChar = Mid(Data, i, 1)
        strTemp = Right("00" & Hex(AscW(strChar)), 4)
        strAll = strAll & Right(strTemp, 2) & Left(strTemp, 2)
    Next
    StringToHex4 = strAll
End Function


Le fichier reg:

Code: Tout sélectionner
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000002]
"New Signature"=hex:10,61,11,11,04,61,04,11,61,09,00,00


Convertissez votre texte en Hexadecimal et mettez a la place de la valeur ci-dessus.

En esperant que ça servent...
jlefay
Full Member
Full Member
 
Messages: 185
Inscrit le: Jeu 20 Oct 2005, 10:48
Localisation: TOURS

Retourner vers Programmation

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : joe57000 et 0 invités



Accueil | News | Articles | Tips | Outils | FAQ XP | Certification | Easters Eggs
Essentiels | Top Sites | Glossaire | Vidéos | Whitepapers | Essentiels | Boîte à Scripts
Conditions d'utilisation é Copyright | Respect de la vie privée