Page 1 sur 1

Accès rapide aux Comptes Windows Mail (Vista only)

Publié : dim. 22/mars/2009 13:04
par Jacobus
Hello! J'avais besoin de ça pour une vision rapide de mes comptes e-mail sans passer systèmatiquement par le programme complet. Alors voilà, que tout le monde en profite. Code en PB 4.30 Nécessite d'utiliser Windows Vista et Windows Mail

Code : Tout sélectionner

Enumeration
#WinMailAccount
#ListAccount
#Btn_Analyse
#Text_Analyse
EndEnumeration
Procedure.s GetDirectoryFullPath(Flag.l)
    hKey.l = 0
    keyvalue.s = Space(255)
    datasize.l = 255
    If Flag < 24 Or Flag = 36
        OpenKey.l = #HKEY_CURRENT_USER
    Else
        OpenKey.l = #HKEY_LOCAL_MACHINE
    EndIf
    SubKey.s = "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
    Select Flag
        Case 10 : ValueName.s = "Local AppData"
    EndSelect    
    If RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ, @hKey)
        MessageBeep_(#MB_ICONEXCLAMATION)
        keyvalue = "Pas de clé!"
    Else
        If RegQueryValueEx_(hKey, ValueName, 0, 0, @keyvalue, @datasize)
            keyvalue = "" 
        Else
            keyvalue = Left(keyvalue, datasize - 1) 
        EndIf
        RegCloseKey_(hKey)
    EndIf
    If Right(keyvalue, 1) <> "\" : keyvalue = keyvalue + "\" : EndIf
    ProcedureReturn keyvalue
EndProcedure
Procedure AnalyseUserAccount()
 
If CountGadgetItems(#ListAccount)<>0
 ClearGadgetItems(#ListAccount)
EndIf 
Directory$ = GetDirectoryFullPath(10)+"Microsoft\Windows Mail\Local Folders\"
If Directory$
 SetGadgetText(#Text_Analyse, "Examen de vos comptes Windows mail en cours...")
  If ExamineDirectory(0, Directory$, "*.oeaccount") ;recherche les fichiers de compte dans le répertoire local     
    While NextDirectoryEntry(0)      
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File        
        Fichier$ = DirectoryEntryName(0)        
         If ReadFile(1, Directory$+Fichier$); Si on peut lire le fichier         
          While Eof(1) = 0 ; On boucle jusqu'à la fin du fichier. (Eof = 'End Of File')             
            Chaine$ = ReadString(1,#PB_Unicode) ; mode UTF-16 / unicode  (Chaîne de départ)                      
             ;CI-DESSOUS L'ORDRE EST IMPORTANT ET NE DOIT PAS ÊTRE MODIFIE POUR LA RECHERCHE DES INFORMATIONS
             ;SEUL L'AFFICHAGE PEUT ÊTRE DESORDONNE. CELA PERMET D'ACCELERER LE PROCESSUS EN EVITANT DE LIRE PLUSIEURS FOIS LE MÊME FICHIER
             ;J'utilise une ListIconGadget() qui montre bien la possibilité d'afficher dans une colonne puis une autre sans s'occuper de l'ordre
              If FindString(Chaine$, "Account_Name", 1) <>0 ; si le nom est trouvé
               ;on nettoie le code pour en tirer que le nom
               Chaine0$ = RemoveString(Chaine$, "<Account_Name type="+Chr(34)+"SZ"+Chr(34)+">"); première partie, 
               Chaine0$ = RemoveString(Chaine0$, "</Account_Name>"); fin de la ligne                 
              ElseIf FindString(Chaine$, "POP3_Server type", 1) <>0 ;si le server pop est trouvé...
               ;on extrait le nom su server du code
               Chaine1$ = RemoveString(Chaine$, "<POP3_Server type="+Chr(34)+"SZ"+Chr(34)+">")
               Chaine1$ = RemoveString(Chaine1$, "</POP3_Server>")           
              ElseIf FindString(Chaine$, "SMTP_Server type", 1) <>0 
               Chaine2$ = RemoveString(Chaine$, "<SMTP_Server type="+Chr(34)+"SZ"+Chr(34)+">")
               Chaine2$ = RemoveString(Chaine2$, "</SMTP_Server>")                              
              ElseIf FindString(Chaine$, "SMTP_Display_Name type", 1) <>0 
               Chaine3$ = RemoveString(Chaine$, "<SMTP_Display_Name type="+Chr(34)+"SZ"+Chr(34)+">")
               Chaine3$ = RemoveString(Chaine3$, "</SMTP_Display_Name>")            
              ElseIf FindString(Chaine$, "SMTP_Email_Address type", 1) <>0 
               Chaine4$ = RemoveString(Chaine$, "<SMTP_Email_Address type="+Chr(34)+"SZ"+Chr(34)+">")
               Chaine4$ = RemoveString(Chaine4$, "</SMTP_Email_Address>")                           
              EndIf                                  
          Wend
          ;Affichage dans la liste et dans le désordre (ça permet de choisir les infos qu'on veut)         
          AddGadgetItem(#ListAccount, -1, Chaine4$+Chr(10)+Chaine0$+Chr(10)+Chaine1$+Chr(10)+Chaine2$+Chr(10)+Chaine3$)          
          CloseFile(1) ; On refermele fichier *.oeaccount
         Else
          Debug "Impossible d'ouvrir le fichier: "+Fichier$
         EndIf      
      EndIf      
    Wend
    FinishDirectory(0)
  EndIf
  SetGadgetText(#Text_Analyse, "Statut de vos comptes Windows mail.")
Else 
 SetGadgetText(#Text_Analyse, "Dossier non trouvé! Vous devez utiliser Windows Vista.")
EndIf 
EndProcedure

If OpenWindow(#WinMailAccount ,0,0, 795, 250, "Mes Comptes Windows Mail", #PB_Window_SystemMenu|#PB_Window_ScreenCentered |#PB_Window_TitleBar)    
   ButtonGadget(#Btn_Analyse,5,2,100,25,"Analyser") 
   TextGadget(#Text_Analyse,110,10,400,15,"")  
   ListIconGadget(#ListAccount, 5,30,785,200,"E-mail",200,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection); adresse mail correspondante
   AddGadgetColumn(#ListAccount,1,"Nom du compte",150); Nom du compte utilisateur
   AddGadgetColumn(#ListAccount,2,"Server POP",120) ; courrier entrant
   AddGadgetColumn(#ListAccount,3,"Server SMTP",120); courrier sortant
   AddGadgetColumn(#ListAccount,4,"Expéditeur",200); Nom de l'expéditeur tel qu'affiché dans les messages sortants   
Repeat 
  Event = WaitWindowEvent() 
  Select Event 
    Case #PB_Event_Gadget 
      Select EventGadget()    
        Case #Btn_Analyse : AnalyseUserAccount()      
      EndSelect
    Case #PB_Event_CloseWindow : Quitter = 1 
  EndSelect
Until Quitter 
End 
EndIf 
Bon dimanche et @+