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

Programmation d'applications complexes
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

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

Message 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 @+
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.