Page 3 sur 5

Re: [R] Script Sauvegarde PSt

Posté : ven. 06 juin 2008 08:09
par Tlem
Ne pouvez-vous pas faire vous même un Regedit puis CTRL + F et taper le chemin de la base sur votre machine, ou tout simplement Outlook.pst puis F3 à chaque occurrence trouvé ?

Ou encore mieux, une simple recherche avec Google !!!
http://www.google.fr/search?hl=fr&q=reg ... ogle&meta=
Vous y découvrirez qu'il est possible de limiter la taille du fichier .pst !

Re: [R] Script Sauvegarde PSt

Posté : ven. 06 juin 2008 11:49
par jujubois
:?
hmmm si je demandais ça, c'est que j avais deja fait ma recherche google ou registre et que je ne trouvais rien de clair

Désolé que tu le prennes mal

julien

Re: [R] Script Sauvegarde PSt

Posté : ven. 06 juin 2008 14:54
par Tlem
jujubois a écrit :Désolé que tu le prennes mal
Je ne le prend pas mal, c'est que vous avez tout simplement les outils de recherche à votre disposition et je tenais à vous le signaler, c'est tout.

Vraisemblablement le forum Anglais, vous à apporté une réponse. :P

Re: [R] Script Sauvegarde PSt

Posté : ven. 06 juin 2008 16:28
par jujubois
:) oui mais difficilement loool moi et l anglais....

J arrive pas a trouver la clé qui contient le chemin pst...

Re: [R] Script Sauvegarde PSt

Posté : ven. 06 juin 2008 22:46
par Tlem
Le code de ptrex me semble pourtant des plus simple !!!

Présenté comme ceci il vous parait encore plus évident ?

Code : Tout sélectionner

$Res = _PathOutlookPST()
MsgBox(64, "Info", "Le chemin de la base de donnée est : " & @CRLF & $Res )

Func _PathOutlookPST()
$sKeyPath = "HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"
For $i= 1 to 50
    $sKey = RegEnumKey($sKeyPath, $i)
        If @error <> 0 then ExitLoop
    For $ii = 1 to 100
        $sEnumPath = $sKeyPath & "\" & $sKey
            $sKeyVal = RegEnumVal($sEnumPath, $ii)

        If @error <> 0 Then ExitLoop
        $sRegVal = RegRead ($sEnumPath, $sKeyVal)
            If Bitor(StringRight($sRegVal,4) = ".PST", StringRight($sRegVal,4) = ".OST") then
                Return $sRegVal
            EndIf
    Next
Next
EndFunc

Re: [R] Script Sauvegarde PSt

Posté : sam. 07 juin 2008 01:07
par jujubois
Bonsoir

Tu vas me trouver super relou ... mais chez moi ça me donne "0" ! chez toi ça marche ?


Julien

Re: [R] Script Sauvegarde PSt

Posté : sam. 07 juin 2008 09:46
par Tlem
J'ai installé un Outlook 2002 pour mon pocket et effectivement ça fonctionne.

Sinon, regardez dans la base de registre dans la clé :

Code : Tout sélectionner

"HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"
et regardez ce que vous avez !!!

Si vous n'avez rien, cela sera vraiment étrange.
Faites donc une recherche dans la base de registre avec .pst et regardez si vous arrivez à trouver un chemin !!!

Sinon je vois vraiment pas.

Re: [R] Script Sauvegarde PSt

Posté : sam. 07 juin 2008 10:32
par jujubois
Si je fais une recherche de 'pst" ça n abouti sur rien ...

Code : Tout sélectionner

"HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"
oui j ai plein de valeur mais binaire !! aucun chemin en clair :?

Re: [R] Script Sauvegarde PSt

Posté : sam. 07 juin 2008 12:22
par Tlem
Sous DOS, faites :

Code : Tout sélectionner

REG EXPORT "HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook" C:\Outlook.reg
et envoyez moi le fichier C:\Outlook.reg.
Ou si vous savez le faire, faites cet export à partir du Regedit.

Re: [R] Script Sauvegarde PSt

Posté : dim. 08 juin 2008 23:33
par jujubois
Bonjour

Ok je vous envoie ça demain ^^ merci de votre aide

Re: [R] Script Sauvegarde PSt

Posté : mar. 10 juin 2008 09:14
par jujubois
lu all

Tlem je t envoi le lien pour récupérer le outlook.reg

Merci

Re: [R] Script Sauvegarde PSt

Posté : mar. 10 juin 2008 10:21
par ani
Binaire ?

Une fonction de conversion existe sous autoit

Code : Tout sélectionner

BinaryToString ( expression [, flag] )
du moins j'espere ^^"

bonne continuation ;)

Re: [R] Script Sauvegarde PSt

Posté : mar. 10 juin 2008 22:31
par Tlem
Voici une piste :

Code : Tout sélectionner

#include <string.au3>

; Lit une des clés de la base de registre.
$Hex = RegRead("HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\0a0d020000000000c000000000000046","001f0324")
; Supprime les 00 entre chaque valeur de caractére.
$Hex = StringReplace ( $Hex, "00", "")
; Affiche le résultat.
MsgBox(0,"",_HexToString($Hex))
 
Je pense qu'il faudrais scanner toutes les clés de HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\ à la recherche du fichier .pst puis utiliser la recherche.
Je ne sais pas pourquoi les infos sont stockées de cette manière, mais bon je suis sur que vous allez y arriver. 8)

Re: [R] Script Sauvegarde PSt

Posté : mer. 11 juin 2008 07:16
par jujubois
Salut

Merci beaucout t assure trop :!: selon mes premiers tout fonctionne a merveille ^^ j'etend mes tests sur d'autre postes


Merci à bientot

Re: [R] Script Sauvegarde PSt

Posté : mer. 11 juin 2008 19:19
par jujubois
Op me voici de retour ^^ C'est génial ça marche ^^ :lol:

Une dernier question pour ce post ! The last :

J'aurai besoin de tronquer une chaine de caractaire ? exemple :

je récupère la chaine suivante : "c:\exemple\toto\...\tata\fichier.txt"

et je voudrais garder : "c:\exemple\toto\...\tata\"

J ai cherché dans le forum avec quelques mots clé mais rien trouver j vais voir sur google en attendant

@+

Re: [R] Script Sauvegarde PSt

Posté : jeu. 12 juin 2008 15:58
par Tlem
Utilisez ceci : _PathSplit
Regardez dans la doc comment vous en servir.

Re: [R] Script Sauvegarde PSt

Posté : jeu. 12 juin 2008 17:46
par jujubois
Génial !!!!!!!!!!!!! :!:

Merci 8)

Voici mon code à jours

Code : Tout sélectionner

#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstants.au3>
#include <string.au3>
#include <file.au3>
#NoTrayIcon

HotKeySet("²", "endscript")

If Not @Compiled Then
    MsgBox(16, "Erreur", "Le script doit être compiler pour fonctionner.")
    Exit
EndIf

$Src = _PathOutlookPST()
$Dst = @ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY
$7zaPath = @TempDir & "\7za.exe"
$Archive = @ScriptDir & "\" & @UserName & "_" & @YEAR & @MON & @MDAY & ".7z"
$Outlook = "non"
$sCMDLine = " a -r " & '"' &$Archive& '"' & " " & '"' & $Dst & '"'

If Not Fileexists($Src) Then
    MsgBox(16,"Erreur","Aucun profil Outlook trouvé !")
    exit
Else
    DirCreate (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY )
EndIf

FileInstall("c:\7za\7za.exe",$7zaPath)

If Not Fileexists($7zaPath) Then
    MsgBox(16,"Erreur","Le programme de compression n'à pas été trouvé !")
    exit
EndIf


If $CMDLINE[0] Then
    If $CMDLINE[1] = "S" Then
        sleep(1000)  
       
        If ProcessExists("outlook.exe") Then
            ProcessClose("outlook.exe")
            $Outlook = "oui"
            Sleep(5000)
        EndIf
    
        ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Copie en cours ...")
        
        If FileCopy($Src, $Dst, 9) Then
            
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Copie terminée ...")
            sleep(1000)
            
            If $Outlook = "oui" Then
                ShellExecute("outlook.exe")
            EndIf
        
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Compression en cours ...")
            $Res = _CMD7zaExe($7zaPath, $sCMDLine)
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Compression terminée ...")
            sleep(1000) 
            
            If $Res = 0 Then 
                MsgBox(64,"Erreur Archive", "Erreur lors de la création de l'archive") 
                Exit
            Else
        
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Sauvegarde terminée ...")
            sleep(1000) 
            FileDelete($7zaPath)
            DirRemove (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY,1)
            Exit
        EndIf
        Else
            MsgBox(64,"Erreur Copie", "Erreur lors de la copie") 
            Exit
        EndIf
                
        Exit
    
    EndIf
EndIf


$Ca = GUICreate ( "OutlookBackupTool" , 250 , 46 , 0 , 0 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel ("Sauvegarde Outlook en cours ...",  23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)



$Pid = Run(@ScriptName & ' S')
AdlibEnable("_Test2ndInstance")
_SliderRight()


;===============================================================================
;===============================================================================

Func _PathOutlookPST()
Dim $szDrive, $szDir, $szFName, $szExt  
$sKeyPath = "HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"

For $i= 1 to 50
    $sKey = RegEnumKey($sKeyPath, $i)
        If @error <> 0 then ExitLoop
    For $ii = 1 to 100
        $sEnumPath = $sKeyPath & "\" & $sKey
            $sKeyVal = RegEnumVal($sEnumPath, $ii)

        If @error <> 0 Then ExitLoop
        If $sKeyVal = "001f6700" Then
            $sRegVal = RegRead ($sEnumPath, $sKeyVal)
            $Hex = StringReplace ( $sRegVal, "00", "")
            $CheminCOMPLET = _HexToString($Hex)
            _PathSplit($CheminCOMPLET, $szDrive, $szDir, $szFName, $szExt)
            $CheminPST = $szDrive & $szDir
            Return $CheminPST
        EndIf
    Next
Next
EndFunc
;===============================================================================

Func _CMD7zaExe($7zaPath, $sCMDLine)
    If  Fileexists($Archive) Then
        FileDelete($Archive)
    EndIf
    
    ShellExecuteWait($7zaPath, $sCMDLine, "", "", @SW_HIDE)
    $error = @error
    
    If $error Then
        Return 0
    Else
        Return 1
    EndIf
EndFunc   ;==>_CMD7zaExe
;===============================================================================

Func _SliderRight()
        Local $newcolor,$color = 0x050000
    For $m = 0 To 245 Step 5
        $newcolor += $color
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $newcolor)
        Sleep(50)
    Next
     _SliderLeft()
EndFunc
;===============================================================================

Func _SliderLeft()
    Local $backcolor,$color = 0x050000
    For $m = 245 To 0 Step -5
        $backcolor += $color  
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $backcolor)
        Sleep(50)
    Next
    _SliderRight()
EndFunc
;===============================================================================

Func _Test2ndInstance()
    If Not ProcessExists($Pid) Then Exit
EndFunc
;===============================================================================
    
Func endscript()
    
    If ProcessExists("7za.exe") Then
        ProcessClose("7za.exe")
        Sleep(5000)
    EndIf
    
    If  Fileexists(@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY) Then
        DirRemove (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY,1)
    EndIf

    If  Fileexists($Archive) Then
        FileDelete($Archive)
    EndIf
    
    Exit
    
EndFunc
;===============================================================================
;===============================================================================

Re: [R] Script Sauvegarde PSt

Posté : ven. 13 juin 2008 10:29
par jujubois
Salut all

Je souhaitais améliorer mon script en passant en parametre le chemin de destination de mon archive, ça se n est pas le probleme mais pb c'est que j utilise CMDLine déjà dans mon script pour mes 2 instances script/progress bar...

ci joint le code rajouté au post précédent :

Code : Tout sélectionner

;~  récupération des paramètres
If $CMDLine[0] > 0 Then ; vérification si paramètre
    $DstLine = $cmdline[1] ;lecture du 1er paramètre
Else
    MsgBox(0,"erreur","paramètre obligatoire")
    exit
EndIf

$Src = _PathOutlookPST()
$Dst = @ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY
$7zaPath = @TempDir & "\7za.exe"
$Archive =  $DstLine & "_" & @YEAR & @MON & @MDAY & ".7z"
$Outlook = "non"
$sCMDLine = " a -r " & '"' &$Archive& '"' & " " & '"' & $Dst & '"'

Pouvez vous m aider, merci

Re: [R] Script Sauvegarde PSt

Posté : ven. 13 juin 2008 16:17
par Tlem
Il n'y a pas de problème, il vous suffit de rajouter les conditions à la suite du bloc de code concernant le :

Code : Tout sélectionner

If $CMDLINE[1] = "S" Then
Ca donnerait un truc comme ca :

Code : Tout sélectionner

If $CMDLINE[0] Then
    If $CMDLINE[1] = "S" Then
        Sleep(1000)
    ; ...
    ; Le reste du code pour fermer Outlook.
    ; ...
    EndIf
    If FileExists($CMDLINE[1]) Then
        $Dst = $CMDLINE[1]
    Else
        Msgbox(16, "Erreur", "La destination n'existe pas") ; Une boite de dialogue de création
                                                            ; de la destination peut être judicieux !
        Exit
    EndIf
EndIf

Re: [R] Script Sauvegarde PSt

Posté : ven. 13 juin 2008 16:40
par jujubois
Je suis vraiment désolé de t embeter encore .... :cry:

j ai fais ma modif' mais ça ne va pas ... j ai l impression que

Code : Tout sélectionner

$Pid = Run(@ScriptName & ' S')
met le bazard ....

Voici ce que j'ai fait :

Code : Tout sélectionner

#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstants.au3>
#include <string.au3>
#include <file.au3>
#include <INet.au3>
#NoTrayIcon

HotKeySet("²", "endscript")



If Not @Compiled Then
    MsgBox(16, "Erreur", "Le script doit être compiler pour fonctionner.")
    Exit
EndIf



$Src = _PathOutlookPST()
$Dst = @ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY
$7zaPath = @TempDir & "\7za.exe"

$Outlook = "non"


If Not Fileexists($Src) Then
    MsgBox(16,"Erreur","Aucun profil Outlook trouvé !")
    exit
Else
    DirCreate (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY )
EndIf

FileInstall("c:\7za\7za.exe",$7zaPath)

If Not Fileexists($7zaPath) Then
    MsgBox(16,"Erreur","Le programme de compression n'à pas été trouvé !")
    exit
EndIf


If $CMDLINE[0] Then
    If $CMDLINE[1] = "S" Then
        sleep(1000)  
       
        If ProcessExists("outlook.exe") Then
            ProcessClose("outlook.exe")
            $Outlook = "oui"
            Sleep(5000)
        EndIf
    
    If FileExists($CMDLINE[1]) Then
        $DstLine = $CMDLINE[1]
        $Archive =  $DstLine & "_" & @YEAR & @MON & @MDAY & ".7z"
        $sCMDLine = " a -r " & '"' &$Archive& '"' & " " & '"' & $Dst & '"'
    Else
        MsgBox(0,"erreur","paramètre obligatoire")
        exit
    EndIf
    
        ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Copie en cours ...")
        
        If FileCopy($Src, $Dst, 9) Then
            
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Copie terminée ...")
            sleep(1000)
            
            If $Outlook = "oui" Then
                ShellExecute("outlook.exe")
            EndIf
        
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Compression en cours ...")
            $Res = _CMD7zaExe($7zaPath, $sCMDLine)
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Compression terminée ...")
            sleep(1000) 
            
            If $Res = 0 Then 
                MsgBox(64,"Erreur Archive", "Erreur lors de la création de l'archive") 
                Exit
            Else
        
            ControlSetText ( "OutlookBackupTool", "", "[CLASS:Static; INSTANCE:1]", "Sauvegarde terminée ...")
            sleep(1000) 
            FileDelete($7zaPath)
            DirRemove (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY,1)
            Exit
        EndIf
        Else
            MsgBox(64,"Erreur Copie", "Erreur lors de la copie") 
            Exit
        EndIf
                
        Exit
    
    EndIf
EndIf


$Ca = GUICreate ( "OutlookBackupTool" , 250 , 46 , 0 , 0 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel ("Sauvegarde Outlook en cours ...",  23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)



$Pid = Run(@ScriptName & ' S')
AdlibEnable("_Test2ndInstance")
_SliderRight()


;===============================================================================
;===============================================================================

Func _PathOutlookPST()
Dim $szDrive, $szDir, $szFName, $szExt  
$sKeyPath = "HKCU\SOFTWARE\MICROSOFT\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook"

For $i= 1 to 50
    $sKey = RegEnumKey($sKeyPath, $i)
        If @error <> 0 then ExitLoop
    For $ii = 1 to 100
        $sEnumPath = $sKeyPath & "\" & $sKey
            $sKeyVal = RegEnumVal($sEnumPath, $ii)

        If @error <> 0 Then ExitLoop
        If $sKeyVal = "001f6700" Then
            $sRegVal = RegRead ($sEnumPath, $sKeyVal)
            $Hex = StringReplace ( $sRegVal, "00", "")
            $CheminCOMPLET = _HexToString($Hex)
            _PathSplit($CheminCOMPLET, $szDrive, $szDir, $szFName, $szExt)
            $CheminPST = $szDrive & $szDir
            Return $CheminPST
        EndIf
    Next
Next
EndFunc
;===============================================================================

Func _CMD7zaExe($7zaPath, $sCMDLine)
    If  Fileexists($Archive) Then
        FileDelete($Archive)
    EndIf
    
    ShellExecuteWait($7zaPath, $sCMDLine, "", "", @SW_HIDE)
    $error = @error
    
    If $error Then
        Return 0
    Else
        Return 1
    EndIf
EndFunc   ;==>_CMD7zaExe
;===============================================================================

Func _SliderRight()
        Local $newcolor,$color = 0x050000
    For $m = 0 To 245 Step 5
        $newcolor += $color
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $newcolor)
        Sleep(50)
    Next
     _SliderLeft()
EndFunc
;===============================================================================

Func _SliderLeft()
    Local $backcolor,$color = 0x050000
    For $m = 245 To 0 Step -5
        $backcolor += $color  
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $backcolor)
        Sleep(50)
    Next
    _SliderRight()
EndFunc
;===============================================================================

Func _Test2ndInstance()
    If Not ProcessExists($Pid) Then Exit
EndFunc
;===============================================================================
    
Func endscript()
    
    If ProcessExists("7za.exe") Then
        ProcessClose("7za.exe")
        Sleep(5000)
    EndIf
    
    If  Fileexists(@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY) Then
        DirRemove (@ScriptDir  & "\" & @UserName & "_" & @YEAR & @MON & @MDAY,1)
    EndIf

    If  Fileexists($Archive) Then
        FileDelete($Archive)
    EndIf
    
    Exit
    
EndFunc
;===============================================================================
;===============================================================================