FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Interface avec Outlook - Page 2 Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Interface avec Outlook - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Interface avec Outlook - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Interface avec Outlook - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Interface avec Outlook - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Interface avec Outlook - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Interface avec Outlook - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Interface avec Outlook - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Interface avec Outlook - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Interface avec Outlook - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Interface avec Outlook - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Interface avec Outlook - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Interface avec Outlook - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Interface avec Outlook - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Interface avec Outlook - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 Interface avec Outlook

Aller en bas 
5 participants
Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptySam 20 Fév 2021 - 14:50

Nouvelle étape:
On peut maintenant déplacer un mail d'un dossier dans un autre !
Pour cela, il faut:
- sélectionner un mail (pour qu'il soit affiché dans le visualisateur en bas à droite)
- dans le menu "Navigation", choisir la nouvelle ligne "Afficher le sélecteur des dossiers"
==> la liste des dossiers s'affiche sur fond jaune, sans aucun dossier présélectionné
- cliquer sur le dossier de destination
==> il sera affiché sur fond bleu avec écriture blanche, mais rien ne se passe encore
- cliquer sur le bouton "OK"
==> le mail est déplacé de son dossier d'origine
==> la liste entière des dossiers est rechargée
==> le dossier d'origine est sélectionné automatiquement
==> on constate que le mail visé a disparu de ce dossier
- cliquer sur le dossier de destination
==> on voit que le mail a bien été déplacé dans ce dossier

Dans certains cas, et je ne sais pas encore ce qui conditionne cela, Outlook refuse de déplacer un mail. Dans je cas, on message clair est affiché et rien n'est changé dans les listes et tableaux.

Voici le programme de démo qui va avec:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"-"
    sub_menu 115 : parent 115,11 : caption 115,"Sortir"                  : on_click 115,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des mails - noms"                    : on_click 315,information_mails_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des mails - objets"                  : on_click 316,information_mails_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des mails - noms et objets"          : on_click 317,information_mails_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Informations mail 1"                      : on_click 319,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
 
   
memo 1001 : hide 1001 : bar_both 1001   

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,750
  height 0,600
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0),400,200)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      message text$(1001)
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      message "Dossier choisi: "+s$
    end_if

  end_if
  return
 
navigation_reception:
  s$ = "Boîte de réception"
  res% = dll_call2("SelectOutlookFolder",POL%,adr(s$))
  return
 
navigation_contacts_non:
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
information_dossiers_1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 1:19

J'ai réglé le problème qui m'obligeait de recharger tous les dossiers après un déplacement de mail.

Donc, je republie la nouvelle étape:
On peut maintenant déplacer un mail d'un dossier dans un autre !
Pour cela, il faut:
- sélectionner un mail (pour qu'il soit affiché dans le visualisateur en bas à droite)
- dans le menu "Navigation", choisir la nouvelle ligne "Afficher le sélecteur des dossiers"
==> la liste des dossiers s'affiche sur fond jaune, sans aucun dossier présélectionné
- cliquer sur le dossier de destination
==> il sera affiché sur fond bleu avec écriture blanche, mais rien ne se passe encore
- cliquer sur le bouton "OK"
==> le mail est déplacé de son dossier d'origine
==> la liste entière des dossiers est rechargée
==> le dossier d'origine est sélectionné automatiquement
==> on constate que le mail visé a disparu de ce dossier
- cliquer sur le dossier de destination
==> on voit que le mail a bien été déplacé dans ce dossier

Voici le programme de démo (mais il faut recharger KGF.dll):
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"-"
    sub_menu 115 : parent 115,11 : caption 115,"Sortir"                  : on_click 115,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des mails - noms"                    : on_click 315,information_mails_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des mails - objets"                  : on_click 316,information_mails_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des mails - noms et objets"          : on_click 317,information_mails_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Informations mail 1"                      : on_click 319,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
 
   
memo 1001 : hide 1001 : bar_both 1001   

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,750
  height 0,600
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0),400,200)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      message text$(1001)
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      message "Dossier choisi: "+s$
    end_if

  end_if
  return
 
navigation_reception:
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
information_dossiers_1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 9:46

Petite amélioration visuelle:
après la sélection d'un mail dans la grille des mails en haut à droite, cette ligne reste affichée en écriture blanche que fond bleu même si l'on clique ailleurs (dans un menu, dans un autre programme, etc).

Juste KGF.dll à télécharger, le programme démo est inchangé par rapport à la dernière version publiée.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 11:36

Bonjour Klaus !

Ma période d’essai d’Outlook 2019 étant achevée, je ne peux plus effectuer de tests.

Interface avec Outlook - Page 2 K_bmp10


Dans l’interface originale, il m’est devenu impossible de déplacer un message.
Dans ton interface, c’est la même chose.

Voici un dernier rapport dont il ne faut pas tenir compte des points d’échec :

" - sélectionner un mail (pour qu'il soit affiché dans le visualisateur en bas à droite)"
" - dans le menu "Navigation", choisir la nouvelle ligne "Afficher le sélecteur des dossiers" "
" ==> la liste des dossiers s'affiche sur fond jaune, sans aucun dossier présélectionné" : OK !
" - cliquer sur le dossier de destination"
" ==> il sera affiché sur fond bleu avec écriture blanche, mais rien ne se passe encore" : OK !
" - cliquer sur le bouton "OK"
" ==> le mail est déplacé de son dossier d'origine " : Echec
" ==> la liste entière des dossiers est rechargée " : Non décelable
" ==> le dossier d'origine est sélectionné automatiquement " : OK !
" ==> on constate que le mail visé a disparu de ce dossier " : Echec
" - cliquer sur le dossier de destination "
" ==> on voit que le mail a bien été déplacé dans ce dossier " : Echec

+ ton amélioration de ce matin :

" après la sélection d'un mail dans la grille des mails en haut à droite, cette ligne reste affichée en écriture blanche que fond bleu " : OK !

Désolé, pour ce rapport qui ne sert pas à grand chose !
Bonne continuation dans cette aventure !
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 11:50

Tu a raison, marc. Mais, par ma faute, le mdoe d'emploi était partiellement incompet.

Voici la version opérationnelle:
- sélectionner un mail (pour qu'il soit affiché dans le visualisateur en bas à droite)
==> la ligne de la grille des mails reste marquée écriture blanche sur fond bleu
- dans le menu "Navigation", choisir la nouvelle ligne "Afficher le sélecteur des dossiers"
==> la liste des dossiers s'affiche sur fond jaune, sans aucun dossier présélectionné
- cliquer sur le dossier de destination
==> il sera affiché sur fond bleu avec écriture blanche, mais rien ne se passe encore
- cliquer sur le bouton "OK"
==> rien ne se passe encore, mais le dossier cible est identifié
- dans le menu "Actions", choisir "Déplacer un mail"

==> le mail est déplacé de son dossier d'origine
==> la liste entière des dossiers est rechargée (ceci ne se produit plus !)
==> le dossier d'origine est sélectionné automatiquement
==> on constate que le mail visé a disparu de ce dossier
- cliquer sur le dossier de destination
==> on voit que le mail a bien été déplacé dans ce dossier
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 12:08

Nouveau rapport :
...
"==> rien ne se passe encore, mais le dossier cible est identifié" : OK !
"- dans le menu "Actions", choisir "Déplacer un mail" "
"==> le mail est déplacé de son dossier d'origine" OK !
"==> la liste entière des dossiers est rechargée (ceci ne se produit plus !)"
"==> le dossier d'origine est sélectionné automatiquement " : OK !
"==> on constate que le mail visé a disparu de ce dossier" : OK !
"- cliquer sur le dossier de destination"
"==> on voit que le mail a bien été déplacé dans ce dossier" : OK !

cheers
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 12:38

Merci, Marc ! Tes retours sont précieux !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 21 Fév 2021 - 14:42

Voici uune version "améliorée" du programme de démo.
On a maintenant un cadre donnant l'état de l'interace Panoramic/Outlook.
Il affiche des informations pertinantes concernant:
- le dossier affiché
- le dossier choisi par le sélecteur de dossiers
- me contact choisi
- le mail choisi

Voici le code (KGF.dll est inchangée !):
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"-"
    sub_menu 115 : parent 115,11 : caption 115,"Sortir"                  : on_click 115,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des mails - noms"                    : on_click 315,information_mails_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des mails - objets"                  : on_click 316,information_mails_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des mails - noms et objets"          : on_click 317,information_mails_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Informations mail 1"                      : on_click 319,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>" 
edit 1061 : inactive 1061 : top 1061,10 : left 1061,530 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>" 

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
    end_if

  end_if
  return
 
navigation_reception:
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
information_dossiers_1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return

Et voici l'aspect:
Interface avec Outlook - Page 2 Aa160
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 22 Fév 2021 - 9:21

Nouvelle étape:
On peut maintenant envoyer des mails construits par programme !
Pour cela, il y a deux nouvelles lignes dans me menu "Actions":
- Créer un mail par programme
- Créer un mail avec dialogue

La première ligne crée un mail et l'envoie de façon totalement automatique.
La deuxième ligne crée le mail de la même manière mais l'affiche ensuite dans une fenêtre Outlook pour modification.

Il faut d'abord choisir un contact de destination dans le sélecteur des contacts (menu "Navigation"), puis cliquer sur une des deux lignes dans le menu "Actions".

La fonction SendOutlookMail a les paramètres suivants:
- l'objet POL% retourné par CreateOutlook
- l'objet contact retourné dans USER_EVENT_LPARAM lors du USER_EVENT de sélection de contact
- le sujet du mail (si ce paramètre est 0 ou une chaîne vide, un sujet contenant date et heure sera créé)
- le handle d'un mémo contenant la liste des pièces jointes, 1 ligne par pièce (valeur 0 ou mémo vide en cas d'absence de pièces jointes)
- le handle d'un mémo contenant le texte du corps du mail, 1 ligne par ligne de mail (valeur 0 ou mémo vide en cas d'absence de de corps - un corps par défaut sera alors construit)

Le mail sera envoyé par Outlook. Si contact choisi est une de ses propres adresses mail, le mail sera disponible dans l'interface lorque Outlook l'aura reçu (évidemment !). Il sera alors visible dans la "Boite de réception".

Voici le programme de démo avec ces fonctionnalités:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"-"
    sub_menu 115 : parent 115,11 : caption 115,"Sortir"                  : on_click 115,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des mails - noms"                    : on_click 315,information_mails_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des mails - objets"                  : on_click 316,information_mails_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des mails - noms et objets"          : on_click 317,information_mails_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Informations mail 1"                      : on_click 319,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>" 
edit 1061 : inactive 1061 : top 1061,10 : left 1061,530 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>" 

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
    end_if

  end_if
  return
 
navigation_reception:
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
information_dossiers_1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 22 Fév 2021 - 13:10

Bonjour Klaus.

Je voulais tester ton programme pour les dernieres modifs, mais j'ai un message d'erreur en visualisant les contacts

Message

not correct arithmetic expression erreur in function : line 171

Bonne journée
Revenir en haut Aller en bas
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 22 Fév 2021 - 13:59

Désolé Klaus.

C'est ma faute, ma très grande faute.

Je n'avais pas mis la Dll dans la bonne directory.

Bon après midi à tous
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 22 Fév 2021 - 14:37

Nouvelle étape:
Outre l'envoi de mails créés par programme (voir l'étape précédente), on peut maintenant:
- cacher et réafficher l'interface Outlook complet
- chercher et sélectionner un contact par son nom


Pour cela, le menu "Fichiers" contient deux nouvelles lignes:
- Cacher l'interface
- Montrer l'interface

Ces options peuvent être choisies n'importe quand. Elles n'ont pas d'influence sur la fonctionnalité, juste sur l'affichage.

Et le menu "Actions" contient 2 nouvelles lignes:
- Chercher un contact par son nom
- Chercher un contact suivant par son nom
Dans le programme de démo, j'ai mis "Klaus" comme critère de recherche. Il faut bien sûr adapter cela en ligne 323 et 328 pour mettre le critère de votre choix (ou le saisir par MESSAGE_TEXT$ ou MESSAGE_INPUT$, par exemple).

La recherche s'effectue depuis le début de la liste des contacts, en regardant si le critère choisi est présent dans la chaîne de caractères représentant la propriété FullName de l'objet Contact.
Le première ligne retourne ainsi le premier contact trouvé dont FullName contient le critère de recherche.
La seconde ligne cherche au-delà du contact trouvé et retourne ainsi l'occurence suivante, etc.
Même si la liste des contacts n'est pas affichée à ce moment, le contact trouvé est "sélectionné" (affiché en écriture blanche sur fond bleu). On le constate en affichant le sélecteur des contacts par le menu "Navigation".

Voici le programme de démo:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"      : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Sortir"                  : on_click 117,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des mails - noms"                    : on_click 315,information_mails_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des mails - objets"                  : on_click 316,information_mails_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des mails - noms et objets"          : on_click 317,information_mails_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Informations mail 1"                      : on_click 319,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"          : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"  : on_click 416,action_chercher_contact_nom_suivant
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>" 
edit 1061 : inactive 1061 : top 1061,10 : left 1061,530 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>" 

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
 
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
    end_if

  end_if
  return
 
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
 
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyMar 23 Fév 2021 - 10:58

Nouvelle étape:
On a maintenant un sélecteur de compte Outlook !
Dans le menu Navigation, deux nouvelles lignes font leur apparition pour montrer et cacher le sélecteur des comptes Outlook.
Lors de la création de l'interface Outlook la liste des comptes Outlook est chargée dans le sélecteur des comptes.
Le compte Outlook par défaut est sélectionné (affiché en écriture blanche sur fond bleu).
Le nom du compte par défaut est affiché en bas à droite dans le pannéau d'état de l'interface (nouveau champ).
Un clic sur un des comptes du sélecteur des comptes Outlook sélectionne ce compte ce qui génère un USER_EVENT.
Attention: cette sélection est effective dans l'interface Outlook, mais n'affecte pas le compte par défaut de Outlook !
Le menu "Informations" contient aussi 3 nouvelles lignes pour retourner la liste des comptes Outlook.
Lors de la sélection d'un compte, le programme de démo affiche quelques détails du compte.
Les mails envoyés par les fonctions d'envoi du menu "Actions" utilisent maintenant le compte par défaut choisi dans ce sélecteur.
Par ailleurs, le programme tente de détecter la version installée de Outlook et affiche le résultat dans le titre de la Form 0.

Voici le programme de démo:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"      : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Sortir"                  : on_click 117,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"  : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"  : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"               
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                      : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"          : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"  : on_click 416,action_chercher_contact_nom_suivant
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0) 
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0) 
  caption 0,"Outlook version "+trim$(s$)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
 
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")              : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0) 
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
    end_if

  end_if
  return
 
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
 
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
   
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
 
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyJeu 25 Fév 2021 - 10:14

Nouvelle étape:
L'interface Outlook peut maintenant détecter l'arivée de nouveaux mails dans la boite de réception !
C'est une option activée par la fonction SetOutlookNewMailMemo qui autorise le scan des nouveaux mails, indique le handle d'un mémo pour recevoir la liste des objets des nouveaux mails ainsi qu'un intervalle de ttemps pour vérifiern périodiquement l'arrivée de nouveaux mails. Ccei est géré par un timer interne à l'interface.
L'arrivée de nouveaux mails est signalé par un USER_EVENT, et il revient au programme Panoramic de traiter la liste des mails arrivés et de vider cette liste au fur et à mesure que les mails sont traités. Comme l'interface Outlook ajoute les nouveaux mails en fin de liste, il suffit de faire une boucle WHILE sur le nombre d'éléments contenus dans ce mémo, et pour chaque itération, extraire l'élément numéro 1 (le plus ancien !), le supprimer de la liste et de le traiter.

Voici le programme de démo qui va avec. L'intevalle est fixé à 1 minute dans le code Panoramic.
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"      : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Sortir"                  : on_click 117,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"  : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"  : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"               
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                      : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"          : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"  : on_click 416,action_chercher_contact_nom_suivant
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
memo 1102 : hide 1102 : bar_both 1102

container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0) 
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0) 
  caption 0,"Outlook version "+trim$(s$)
  res% = dll_call3("SetOutlookNewMailMemo",POL%,handle(1102),1)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
 
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")              : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0) 
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00070000")              : ' est-ce qu'on a reçu de nouveaux mails ?
      ' USER_EVENT_LPARAM contient le nombre de nouveaux mails
'      message str$(USER_EVENT_LPARAM)+" nouveaux mails:"+chr$(13)+chr$(10)+text$(1102)
      if count(1102)>0
        ' traiter les nouvaux mails
        while count(1102)>0
          ' ici, traiter le mail dans item_read$(1102,1)
          mail% = val(item_read$(1102,1))
          Sujet$ = string$(200," ")
          Expediteur$ = string$(200," ")
          Adresse$ = string$(200," ")
          res% = dll_call6("GetOutlookInformation",POL%,10,mail%,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
          Sujet$ = trim$(Sujet$)
          Expediteur$ = trim$(Expediteur$)
          Adresse$ = trim$(Adresse$)
          message "Mail reçu: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)       
          ' et le supprimer de la liste
          item_delete 1102,1
        end_while
      end_if
      return
    end_if

  end_if
  return
 
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
 
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
   
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
 
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Interface avec Outlook - Page 2 Empty
MessageSujet: re   Interface avec Outlook - Page 2 EmptyJeu 25 Fév 2021 - 15:24

Snif...je n'ai pas Outlook... Sad
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyJeu 25 Fév 2021 - 16:01

Nouvelle étape:
L'interface se "souvient" maintenant de la dernière date et heure de vérification des nouveaux mails. Et lors d'un redémarragedu programme, il récupère non seulement les mails reçus à partir de son lancement, mais également ceux arrivés entre son dernier arrêt et le nouveau lancement. Plus rien n'échappe !

Bien entendu, ce comportement est paramétrable et peut être désactivé à tout moment.

Voici le programme de démo qui gère cela. Pour tester:
- lancer le programme de démo
-recevoir 1 ou plusieurs mails
- attendre un peu (le délai est actuellement fixé à 1 minute)
==> chaque nouveau mail reçu est signalé avec sun sujet et son expéditeur
- arrêter le programme
- recevoir plusieurs mails; en attendant un temps quelconque
- relancer le programme de démo
- attendre un peu que le timer de 1 minute se déclenche
==> tous les mails reçus entre l'arrêt précédent et le nouveau démarrage seront maintenant signalés

Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"     : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"     : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"       : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Sortir"                   : on_click 117,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation"  
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"       : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"                
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"   : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"   : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations"  
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                 : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"               : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"       : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"                
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"                
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"                
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                       : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions"  
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"               : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"               : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"           : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"   : on_click 416,action_chercher_contact_nom_suivant
  
width 0,800
memo 1001 : hide 1001 : bar_both 1001  
memo 1101 : hide 1101 : bar_both 1101  
memo 1102 : hide 1102 : bar_both 1102

container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté"  
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>"  
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>"  

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>"  

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0)  
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0)  
  caption 0,"Outlook version "+trim$(s$)
  res% = dll_call4("SetOutlookNewMailMemo",POL%,handle(1102),1,2)
  return
  
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
  
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
  
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
  
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
  
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                 : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")               : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                              
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")               : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"       Mail: "+Adresse$+chr$(13)+chr$(10)+"   Objet mail="+str$(MailChoisi%)
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")               : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                             : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")               : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)    
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")               : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0)  
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")               : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0)  
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00070000")               : ' est-ce qu'on a reçu de nouveaux mails ?
      ' USER_EVENT_LPARAM contient le nombre de nouveaux mails
'      message str$(USER_EVENT_LPARAM)+" nouveaux mails:"+chr$(13)+chr$(10)+text$(1102)
      if count(1102)>0
        ' traiter les nouvaux mails
        while count(1102)>0
          ' ici, traiter le mail dans item_read$(1102,1)
          mail% = val(item_read$(1102,1))
          Sujet$ = string$(200," ")
          Expediteur$ = string$(200," ")
          Adresse$ = string$(200," ")
          res% = dll_call6("GetOutlookInformation",POL%,10,mail%,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
          Sujet$ = trim$(Sujet$)
          Expediteur$ = trim$(Expediteur$)
          Adresse$ = trim$(Adresse$)
          message "Mail reçu: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"       Mail: "+Adresse$+chr$(13)+chr$(10)+"   Objet mail="+str$(MailChoisi%)        
          ' et le supprimer de la liste
          item_delete 1102,1
        end_while
      end_if
      return
    end_if

  end_if
  return
  
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
  
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
  
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
  
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
  
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
  
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
  
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
    
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
  
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
  
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
  
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
  
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
  
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
  
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return

Dans ce programme de démo, le "traitment" des nouveaux mails reçus se limite à les "signaler".
Bien sûr, dans une application réelle, il y aurait un traitement spécifique (déplacer dans un autre dossier, filtrer les spams, supprimer les mails d'expéditeurs indésirables, ...).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptySam 27 Fév 2021 - 14:51

Nouvelle étape:
On peut maintenant connaître la liste de toutes les clés registre spécifiques à KGF.dll, avec toutes les valeurs associées.
Pour l'heure, seule la clé pour OutlookInterface aves ses deux valeurs est définie.
Pour cela, une nouvelle ligne a été ajouté au menu "Fichiers:
"Montrer les clés registre pour KGF"
Cela fonctionne dès le lancement du programme - inutile de "créer" l'interface Outlook pour cela.

Voici le programme de démo adapté:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, montrer_cles, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"      : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Montrer les clés registre pour KGF" : on_click 117,montrer_cles
    sub_menu 118 : parent 118,11 : caption 118,"-"
    sub_menu 119 : parent 119,11 : caption 119,"Sortir"                  : on_click 119,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"  : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"  : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"               
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                      : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"          : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"  : on_click 416,action_chercher_contact_nom_suivant
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
memo 1102 : hide 1102 : bar_both 1102

container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0) 
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0) 
  caption 0,"Outlook version "+trim$(s$)
  res% = dll_call4("SetOutlookNewMailMemo",POL%,handle(1102),1,2)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
 
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
 
montrer_cles:
  res% = dll_call1("GetAllRegistryKeysForKGF",handle(1102))
  message text$(1102)
  clear 1102
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")              : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0) 
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00070000")              : ' est-ce qu'on a reçu de nouveaux mails ?
      ' USER_EVENT_LPARAM contient le nombre de nouveaux mails
'      message str$(USER_EVENT_LPARAM)+" nouveaux mails:"+chr$(13)+chr$(10)+text$(1102)
      if count(1102)>0
        ' traiter les nouvaux mails
        while count(1102)>0
          ' ici, traiter le mail dans item_read$(1102,1)
          mail% = val(item_read$(1102,1))
          Sujet$ = string$(200," ")
          Expediteur$ = string$(200," ")
          Adresse$ = string$(200," ")
          res% = dll_call6("GetOutlookInformation",POL%,10,mail%,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
          Sujet$ = trim$(Sujet$)
          Expediteur$ = trim$(Expediteur$)
          Adresse$ = trim$(Adresse$)
          message "Mail reçu: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)       
          ' et le supprimer de la liste
          item_delete 1102,1
        end_while
      end_if
      return
    end_if

  end_if
  return
 
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
 
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
   
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
 
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 28 Fév 2021 - 11:16

Voici un bref résumé des fonctionnalités de l'interface Outlook:

C'est un objet non visuel, doublé d'un afficheur reflétant les parties importantes de l'interface.

La partie visuelle montre la liste des dossiers des mails de Outlook, un sélecteur de contacts, un sélecteur de dossiers et un sélecteur de comptes Outlook. Un clic dans une de ces parties affiche son contenu dans une zone d'affichage et sélectionne cet élément pour les traitements ultérieurs.

Un clic dans la liste des dossiers par exemple affiche la liste des sujets des mails présents dans ce dossier. Un clic sur un de ces sujets affiche le contenu du mail, nom et adresse mail de l'expéditeur et la liste des pièces jointes. Un clic sur une des pièces jointes permet de télécharger ce fichier.

Mais la partie visuelle, bien que toujours créée et présente, peut être cachée (non visible). Toutes les fonctions obtenues par des clics dans la partie visible peuvent être obtenues par des appels à des fonctions de service de l'interface. Pour cela, une série de fonctions permet de retourner des listes d'informations: dossiers, mails du dossier choisi, contacts, comptes etc. Une autre série de fonctions permet de sélectionner un dossier, un mail, un compte ou un contact. Il est donc parfaitement possible de créer une interface utilisateut "sur mesure" en Panoramic, selon les besoins du programme.

Une autre série de fonctions permet d'agir sur les données de l'interface et, à travers l'interface, sur le contenu de Outlook. On peut créer un mail, déplacer un mail dans un autre dossier, vider un dossier complètement (testé sur le dossier des éléments indésirables !) etc. La liste des actions est non exhaustive et elle va s'allonger au fur et à mesure.

L'interface signale les différents évènements à Panoramic via le mécanisme des USER_EVENT (sélection d'un dossier, d'un mail, d'une pièce détachée, réception d'un nouveau mail etc). Bien sûr, lorsque le programme utilisant l'interface est arrêté, les mails arrivant dans cette situation ne sont pas "tracés". Cependant, l'interface mémorise la date et l'heure de la dernière vérification de réception de mail. Cette vérification a lieu à des intervalles réguliers (défaut: 1 minute) et cette durée est paramétrable. Et l'interface peut être configurée pour "récupérer" les mails arrivées depuis la dernière vérification, lors d'un nouveau démarrage de l'interface.

Perspectives d'évolution:
- ajouts d'actions dans la liste des actions, comme supprimer un mail, créer ou supprimer un dossier, créer ou supprimer un contact, extraire et archiver les mails d'un dossier ou d'un groupe de dossiers etc.
- je commence à regarder ce que l'on peut faire pour OpenOffice. Je sais que OpenOffice ne contient pas nativement un client Email mais utilise le client Email présent sur le système est configuré dans OpenOffice dans le menu des options. L'écriture d'un mail est assuré par le Writer de OpenOffice. Je vais donc voir si je peux accéder à d'autres clients mail courants, comme Thunderbird. Dommage. Thunderbird n'est pas possible - pas d'interface OLS, pas d'iinterface d'automatisation. Je vais explorer d'autres clients Email gratuits...Après un rapide survol, je n'ai pas trouvé d'autres clients mail supportant le protocol OLE pour l'automatisation. Pour ceux parmi vous qui n'ont pas Outlook, qu'est-ce que vous uilisez comme client Email ? Je parle de clients locaux sous forme de EXE, pas d'un accès internet à un WebMail...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 28 Fév 2021 - 12:57

Bonjour Klaus, bonjour à tous.

J' essaye de tester ton programme.

J' ai pris le programme du 25 Février, pour au moins voir les nouveaux messages.

Je ne vois pas les nouveaux messages arriver.

Une suggestion: peux tu trier les messages en tri descendant, afin d' avoir les nouveaux messages en tête.

Merci

Bonne journée
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyDim 28 Fév 2021 - 13:13

Merci d'avoir essayé.

Citation :
J' ai pris le programme du 25 Février, pour au moins voir les nouveaux messages.

Je ne vois pas les nouveaux messages arriver.

Le mieux est de prendre KGF.dll sur mon site (via la signture de ce post) - c'est la dernière version.
Tu prends aussi la dernière version du programme de démo qui va avec. Pas sécurité, je la poste à nouveau ici:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, montrer_cles, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"    : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"    : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"      : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Montrer les clés registre pour KGF" : on_click 117,montrer_cles
    sub_menu 118 : parent 118,11 : caption 118,"-"
    sub_menu 119 : parent 119,11 : caption 119,"Sortir"                  : on_click 119,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation" 
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"      : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"               
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"  : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"  : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations" 
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"              : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"      : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"               
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"               
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"               
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                      : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions" 
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"              : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"              : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"          : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"  : on_click 416,action_chercher_contact_nom_suivant
 
width 0,800
memo 1001 : hide 1001 : bar_both 1001 
memo 1101 : hide 1101 : bar_both 1101 
memo 1102 : hide 1102 : bar_both 1102

container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté" 
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>" 
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>" 

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>" 

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0) 
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0) 
  caption 0,"Outlook version "+trim$(s$)
  res% = dll_call4("SetOutlookNewMailMemo",POL%,handle(1102),1,2)
  return
 
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
 
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
 
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
 
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
 
montrer_cles:
  res% = dll_call1("GetAllRegistryKeysForKGF",handle(1102))
  message text$(1102)
  clear 1102
  return
 
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")              : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                             
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")              : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")              : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                            : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
      return
    end_if
   
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")              : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)   
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")              : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0) 
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")              : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0) 
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00070000")              : ' est-ce qu'on a reçu de nouveaux mails ?
      ' USER_EVENT_LPARAM contient le nombre de nouveaux mails
'      message str$(USER_EVENT_LPARAM)+" nouveaux mails:"+chr$(13)+chr$(10)+text$(1102)
      if count(1102)>0
        ' traiter les nouvaux mails
        while count(1102)>0
          ' ici, traiter le mail dans item_read$(1102,1)
          mail% = val(item_read$(1102,1))
          Sujet$ = string$(200," ")
          Expediteur$ = string$(200," ")
          Adresse$ = string$(200," ")
          res% = dll_call6("GetOutlookInformation",POL%,10,mail%,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
          Sujet$ = trim$(Sujet$)
          Expediteur$ = trim$(Expediteur$)
          Adresse$ = trim$(Adresse$)
          message "Mail reçu: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"      Mail: "+Adresse$+chr$(13)+chr$(10)+"  Objet mail="+str$(MailChoisi%)       
          ' et le supprimer de la liste
          item_delete 1102,1
        end_while
      end_if
      return
    end_if

  end_if
  return
 
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
 
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
 
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
 
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
 
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
 
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
 
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
   
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
 
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
 
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
 
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
 
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
 
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return

Après le lancement, les mails arrivant APRES le lancement seront signalés par me mécanisme des USER_EVENT, avec un message à l'écran pour chaque mail arrivant. Cependant, il faut attendre un peu (1 à deux minutes après l'arrivée des mails) pour laisser le temps au timer de se déclencher (1 minute npar défaut).

Citation :
Une suggestion: peux tu trier les messages en tri descendant, afin d' avoir les nouveaux messages en tête.
Ca existe déjà ! Dans le tableau des mails du dossier choisi en haut à droite, tu cliques sur un des titres de colonne et le tableau sera autimatiquement trié selon se critère. Un nouveau clic sur le même titre trie le tableau dans l'ordre inverse. Donc, su tu cliques sur le titre de la colonne de réception...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 1 Mar 2021 - 13:18

Question aux utilisateurs de clients mail:

Mon projet Outlook Interface est ciblé Outlook de MicroSoft, comme son nom l'indique. J'ai regardé l'autre client mail de Microsoft: Windows Mail, mais ce produit, bien moins puissant d'ailleurs qu'Outlook, ne peut pas être "automatisée de la même manière. Aucune interface n'est prévué à ce sujet.

Et vous ? Quel client mail utilisez-vous si vous n'avez pas Outlook ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 1 Mar 2021 - 16:38

Bonjour Klaus, et bonjour à tous.

J' ai testé ce matin la dernière version du programme Test Outlook, et je ne reçois toujours pas les nouveaux messages, alors que je

 suis sur d'avoir des messages du 28/02

J' ai un message en lançant le programme:

Panoramic_temp1: Regread: Software\KGF\outlookinterface, et cela 2 fois en suivant.

Cela me fait penser que c'est bien la dernière version de la dll.

J' ai essayé le programme dès que j'ai allume mon ordi.

J' ai ensuite mis en fonction Outlook, et je ne recevais toujours rien.

J'ai coupé et remis en fonction mon ordi et Outlook, et la j'ai reçu mes messages dans Outlook.

Je ne sais pas si ce que j’écris est compréhensible....

Bonne après midi à tous
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 1 Mar 2021 - 18:06

Je répète la marche à suivre:
- lancer Outlook
- afficher la boite de réception de Outlook,
- trier la boite de réception sur date/heure d'arrivée (en cliquant sur le titre de la colonne "Reçu"
- lancer le programme de démo
- dans le menu "Fichier", cliquer sur l'option "Créer l'interface"
==> l'interface s'affiche, l'arboescence des dossiers se remplit,
==> deux messages "regread" apparaissant - c'est provisoire, pour les tests
- dans Outlook, s'envoyer un mail à soi-même, avec un "objet" et un texte quelconue
- dans Outlook, cliquer sur "Envoyer/recevoir"
==> le nouveau mail s'affichera
- revenir à l'interface Outlook et ATTENDRE !
- au bout d'une à deux minutes, un message en provenance de l'interface s'affichera idntifiant le message reçu
- cliquer sur la ligne "Boite de réception" dans l'arborescence des dossier de l'interface Outlook
==> tous les mails de la boite de réception s'affichent, du plus ancien au plus récent
==> ATTENTION ! En fonction du nombre de mails présents, cette phase peut être longue !
- cliquer sur le titre de la colonne "Date" dans la liste des mails à droite
==> les mails seront triés du plus récent au plus ancien - c'est très rapide
==> le nouveau mail adressé à soi-même est visible en début de liste
- laisser l'interface actif, sans rien toucher
==> lorsqu'un nouveau mail arrive dans la boite de réception de Outlook, l'interface le signalera une à deux minutes plus tard
...
- quitter l'interface
- recevoir plusieurs mails dans Outlook, de sorte qu'ils soient visibles dans la boite de réception de Outlook
- relancer l'interface Outlook
==> la liste des dossierd s'affiche à nouveau
- après une à deux minutes d'attente, l'interface Outlook signale chaque mail reçu entretemps, avec un message spécifique par mail, rappelant le sujet du mail et l'expéditeur
- pour voir ces mails apparaître dans la liste des mails de l'interface, il faut recliquer sur la "Boite de réception" dans la liste des dossiers de l'interface Outlook. LE panneau d'affichage des mails disponibles sera alors renouvellé, et les nouveaux mails reçus seront en tête de liste.

Voilà. Ne te laisse pas décourager la la longueur de la liste des actions à effectuer. Tu verras vite la logique sousjacente. L'essentiel est d'attendre là où il faut attendre...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 1 Mar 2021 - 22:12

Bonsoir  à tous !

@Klaus :
Après avoir totalement désinstallé Outlook, je l'ai réinstallé ce qui me permet d'avoir une nouvelle version 100% opérationnelle jusqu'au samedi 06 mars.

Spécifications techniques ::

Remarque : Mon dossier de réception s'appelle Inbox
Spoiler:

Voici un petit compte rendu :

- lancer Outlook
- afficher la boite de réception de Outlook,
- trier la boite de réception sur date/heure d'arrivée (en cliquant sur le titre de la colonne "Reçu"
- lancer le programme de démo
- dans le menu "Fichier", cliquer sur l'option "Créer l'interface"
==> l'interface s'affiche, l'arboescence des dossiers se remplit,
===> Ok !
==> deux messages "regread" apparaissant - c'est provisoire, pour les tests ===> OK !
- dans Outlook, s'envoyer un mail à soi-même, avec un "objet" et un texte quelconue
- dans Outlook, cliquer sur "Envoyer/recevoir"
==> le nouveau mail s'affichera
===> OK !
- revenir à l'interface Outlook et ATTENDRE !
- au bout d'une à deux minutes, un message en provenance de l'interface s'affichera idntifiant le message reçu
=== > Non, pas de message, même après 30mn d'attente.
- cliquer sur la ligne "Boite de réception" dans l'arborescence des dossier de l'interface Outlook
==> tous les mails de la boite de réception s'affichent, du plus ancien au plus récent
===> OK !
==> ATTENTION ! En fonction du nombre de mails présents, cette phase peut être longue !
- cliquer sur le titre de la colonne "Date" dans la liste des mails à droite
==> les mails seront triés du plus récent au plus ancien - c'est très rapide
===> OK !
==> le nouveau mail adressé à soi-même est visible en début de liste ===> OK !
- laisser l'interface actif, sans rien toucher
==> lorsqu'un nouveau mail arrive dans la boite de réception de Outlook, l'interface le signalera une à deux minutes plus tard
===> non, pas de message.
...
- quitter l'interface
- recevoir plusieurs mails dans Outlook, de sorte qu'ils soient visibles dans la boite de réception de Outlook
- relancer l'interface Outlook
==> la liste des dossierd s'affiche à nouveau
===> Ok !
- après une à deux minutes d'attente, l'interface Outlook signale chaque mail reçu entretemps, avec un message spécifique par mail, rappelant le sujet du mail et l'expéditeur
- pour voir ces mails apparaître dans la liste des mails de l'interface, il faut recliquer sur la "Boite de réception" dans la liste des dossiers de l'interface Outlook. LE panneau d'affichage des mails disponibles sera alors renouvellé, et les nouveaux mails reçus seront en tête de liste.
===> non, pas de message. Quand je clique sur le dossier Inbox, les nouveaux mails arrivés entre-temps sont présents.


Je pense que l'absence des messages sur "mails entrants" est dû au fait que le nom du dossier de réception est "Inbox" au lieu de "Boite de réception". Le timer ne surveille pas le bon dossier dans mon cas spécifique ?
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 EmptyLun 1 Mar 2021 - 23:51

Merci beaucoup, Marc ! Comme toujours, ton diagnostic est précis, détaillé et pertinent.
Tu as parfaitement raison: le nom du dossier de réception était codé en constante dans la DLL.

J'ai modifié la fonction qui installe la surveillance, de
Code:
  res% = dll_call4("SetOutlookNewMailMemo",POL%,handle(1102),1,2)
à
Code:
  res% = dll_call5("SetOutlookNewMailMemo",POL%,handle(1102),adr(reception$),1,2)

La variable reception$ doit contenir le nom exact de la boite de réception: à configurer en ligne 15.
Un commentaire montre clairement cette ligne.
Tout devrait fonctionner maintenant. Il faudra évidemment recharger KGF.dll.

Voici la nouvelle version du programme de démo:
Code:
' test_Outlook_2007.bas

label creer, deplacer, agrandir, cacher, montrer, montrer_cles, sortir, UserEvent
label navigation_reception, information_dossiers_1, information_dossiers_2, information_dossiers_3
label information_mails_1, information_mails_2, information_mails_3, information_mail1, action_vider1
label navigation_contacts_oui, navigation_contacts_non, navigation_dossier_oui, navigation_dossier_non
label action_deplacer, action_creer_mail_programme, action_creer_mail_dialog, action_chercher_contact_nom
label action_chercher_contact_nom_suivant, navigation_comptes_oui, navigation_comptes_non
label information_comptes_1, information_comptes_2, information_comptes_3

dim res%, POL%, s$, s1$, mail%, i%, reception$
dim Dossier%, MailIndex%, PieceIndex%, Sujet$, Expediteur$, Adresse$, Contact%, MailChoisi%, DossierChoisi%
dim CompteParDefaut%

reception$ = "Boîte de réception"     : ' <==================   mettre ici le nom EXACT de votre dossier de réception de nouveaux mails

main_menu 1
  sub_menu 11 : parent 11,1 : caption 11,"Fichier"
    sub_menu 111 : parent 111,11 : caption 111,"Creer l'interface"        : on_click 111,creer
    sub_menu 112 : parent 112,11 : caption 112,"Déplacer l'interface"     : on_click 112,deplacer
    sub_menu 113 : parent 113,11 : caption 113,"Agrandir l'interface"     : on_click 113,agrandir
    sub_menu 114 : parent 114,11 : caption 114,"Cacher l'interface"       : on_click 114,cacher
    sub_menu 115 : parent 115,11 : caption 115,"Montrer l'interface"      : on_click 115,montrer
    sub_menu 116 : parent 116,11 : caption 116,"-"
    sub_menu 117 : parent 117,11 : caption 117,"Montrer les clés registre pour KGF" : on_click 117,montrer_cles
    sub_menu 118 : parent 118,11 : caption 118,"-"
    sub_menu 119 : parent 119,11 : caption 119,"Sortir"                   : on_click 119,sortir
  sub_menu 21 : parent 21,1 : caption 21,"Navigation"  
    sub_menu 211 : parent 211,21 : caption 211,"Boite de réception"       : on_click 211,navigation_reception
    sub_menu 212 : parent 212,21 : caption 212,"-"                
    sub_menu 213 : parent 213,21 : caption 213,"Afficher les contacts"    : on_click 213,navigation_contacts_oui
    sub_menu 214 : parent 214,21 : caption 214,"Cacher les contacts"      : on_click 214,navigation_contacts_non
    sub_menu 215 : parent 215,21 : caption 215,"Afficher le sélecteur des dossiers"  : on_click 215,navigation_dossier_oui
    sub_menu 216 : parent 216,21 : caption 216,"Cacher le sélecteur des dossiers"    : on_click 216,navigation_dossier_non
    sub_menu 217 : parent 217,21 : caption 217,"Afficher le sélecteur des comptes"   : on_click 217,navigation_comptes_oui
    sub_menu 218 : parent 218,21 : caption 218,"Cacher le sélecteur des comptes"   : on_click 218,navigation_comptes_non
  sub_menu 31 : parent 31,1 : caption 31,"Informations"  
    sub_menu 311 : parent 311,31 : caption 311,"Liste des dossiers - noms"                 : on_click 311,information_dossiers_1
    sub_menu 312 : parent 312,31 : caption 312,"Liste des dossiers - objets"               : on_click 312,information_dossiers_2
    sub_menu 313 : parent 313,31 : caption 313,"Liste des dossiers - noms et objets"       : on_click 313,information_dossiers_3
    sub_menu 314 : parent 314,31 : caption 314,"-"                
    sub_menu 315 : parent 315,31 : caption 315,"Liste des comptes - noms"                  : on_click 315,information_Comptes_1
    sub_menu 316 : parent 316,31 : caption 316,"Liste des comptes - objets"                : on_click 316,information_Comptes_2
    sub_menu 317 : parent 317,31 : caption 317,"Liste des comptes - noms et objets"        : on_click 317,information_Comptes_3
    sub_menu 318 : parent 318,31 : caption 318,"-"                
    sub_menu 319 : parent 319,31 : caption 319,"Liste des mails - noms"                    : on_click 319,information_mails_1
    sub_menu 320 : parent 320,31 : caption 320,"Liste des mails - objets"                  : on_click 320,information_mails_2
    sub_menu 321 : parent 321,31 : caption 321,"Liste des mails - noms et objets"          : on_click 321,information_mails_3
    sub_menu 322 : parent 322,31 : caption 322,"-"                
    sub_menu 323 : parent 323,31 : caption 323,"Informations mail 1"                       : on_click 323,information_mail1
  sub_menu 41 : parent 41,1 : caption 41,"Actions"  
    sub_menu 411 : parent 411,41 : caption 411,"Vider Courrier indésirable"                : on_click 411,action_vider1
    sub_menu 412 : parent 412,41 : caption 412,"Déplacer un mail"                          : on_click 412,action_deplacer
    sub_menu 413 : parent 413,41 : caption 413,"Créer un mail par programme"               : on_click 413,action_creer_mail_programme
    sub_menu 414 : parent 414,41 : caption 414,"Créer un mail avec dialogue"               : on_click 414,action_creer_mail_dialog
    sub_menu 415 : parent 415,41 : caption 415,"Chercher un contact par son nom"           : on_click 415,action_chercher_contact_nom
    sub_menu 416 : parent 416,41 : caption 416,"Chercher un contact suivant par son nom"   : on_click 416,action_chercher_contact_nom_suivant
  
width 0,800
memo 1001 : hide 1001 : bar_both 1001  
memo 1101 : hide 1101 : bar_both 1101  
memo 1102 : hide 1102 : bar_both 1102

container 1002 : top 1002,height_client(0)-80 : left 1002,10
  width 1002,width_client(0) :  height 1002,height_client(0) - top(1002)
  caption 1002,"Etat de l'interface Panoramic - Outlook"
alpha 1003 : parent 1003,1002 : top 1003,20 : left 1003,10 : parent 1003,1002 : caption 1003,"Etat de l'interface:"
edit 1004 : inactive 1004 : top 1004,20 : left 1004,100 : parent 1004,1002 : font_bold 1004 : text 1004,"Non connecté"  
alpha 1005 : parent 1005,1002 : top 1005,10 : left 1005,240 : parent 1005,1002 : caption 1005,"Dossier choisi:"
edit 1006 : inactive 1006 : top 1006,10 : left 1006,320 : width 1006,200 : parent 1006,1002 : font_bold 1006 : text 1006,"<aucun>"
alpha 1060 : top 1060,10 : left 1060,530 : parent 1060,1002 : caption 1060,"===>"
edit 1061 : inactive 1061 : top 1061,10 : left 1061,560 : width 1061,200 : parent 1061,1002 : font_bold 1061 : text 1061,"<aucun>"

alpha 1007 : parent 1007,1002 : top 1007,30 : left 1007,240 : parent 1007,1002 : caption 1007,"Contact choisi:"
edit 1008 : inactive 1008 : top 1008,30 : left 1008,320 : width 1008,200 : parent 1008,1002 : font_bold 1008 : text 1008,"<aucun>"  
alpha 1009 : parent 1009,1002 : top 1009,50 : left 1009,10 : parent 1009,1002 : caption 1009,"Email choisi:"
edit 1010 : inactive 1010 : top 1010,50 : left 1010,100 : width 1010,420 : parent 1010,1002 : font_bold 1010 : text 1010,"<aucun>"  

alpha 1011 : top 1011,35 : left 1011,530 : parent 1011,1002: caption 1011,"Compte:"
edit 1012 : inactive 1012 : top 1012,50 : left 1012,560 : width 1012,200 : parent 1012,1002 : font_bold 1012 : text 1012,"<aucun>"  

dll_on "KGF.dll"

on_user_event UserEvent

end

sortir:
  POL% = dll_call1("DeleteOutlook",POL%)
  terminate
  return

creer:
  if POL%<>0 then return
  width 0,800
  height 0,700
  top 1002,height_client(0)-80 : width 1002,width_client(0) - 20
  POL% = dll_call4("CreateOutlook",handle(0),10,10,1)
  text 1004,"Connecté"
  s$ = string$(200," ")
  res% = dll_call6("GetOutlookInformation",POL%,7,0,adr(s$),0,0)  
  s$ = trim$(s$)
  text 1012,s$
  s$ = string$(30," ")
  res% = dll_call6("GetOutlookInformation",POL%,9,0,adr(s$),0,0)  
  caption 0,"Outlook version "+trim$(s$)
  res% = dll_call5("SetOutlookNewMailMemo",POL%,handle(1102),adr(reception$),1,2)
  return
  
deplacer:
  if POL%=0 then return
  full_space 0
  res% = dll_call3("LocateOutlook",POL%,0,0)
  top 1002,height_client(0)-100 : left 1002,0 : width 1002,width_client(0)
  return
  
agrandir:
  if POL%=0 then return
  res% = dll_call5("ResizeOutlook",POL%,width_client(0),height_client(0)-100,400,200)
  top 1002,height_client(0)-100 : width 1002,width_client(0)
  return
  
cacher:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,0)
  return
  
montrer:
  if POL%=0 then return
  res% = dll_call2("OutlookVisibility",POL%,1)
  return
  
montrer_cles:
  res% = dll_call1("GetAllRegistryKeysForKGF",handle(1102))
  message text$(1102)
  clear 1102
  return
  
UserEvent:
'  message "UserEvent: WPARAM="+right$("0000000"+hex$(USER_EVENT_WPARAM),8)+"  LPARAM="+right$("0000000"+hex$(USER_EVENT_LPARAM),8)
  if bin_and(USER_EVENT_WPARAM,hex("FF000000"))=hex("13000000")                 : ' est-ce un USER_EVENT de Outlook ?

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00010000")               : ' est-ce une sélection de dossier ?
      Dossier% = USER_EVENT_LPARAM                                              
      s$ = string$(200," ")
      Dossier% = dll_call6("GetOutlookInformation",POL%,1,0,adr(s$),0,0)        : ' dossier% contient l'objet du dossier
      s$ = trim$(s$)
      text 1006,s$
      message "Dossier choisi: "+s$
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00020000")               : ' est-ce une sélection de mail ?
      MailIndex% = USER_EVENT_LPARAM
      Sujet$ = string$(200," ")
      Expediteur$ = string$(200," ")
      Adresse$ = string$(200," ")
      MailChoisi% = dll_call6("GetOutlookInformation",POL%,2,USER_EVENT_LPARAM,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
      Sujet$ = trim$(Sujet$)
      Expediteur$ = trim$(Expediteur$)
      Adresse$ = trim$(Adresse$)
      text 1010,sujet$
      message "Mail choisi: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"       Mail: "+Adresse$+chr$(13)+chr$(10)+"   Objet mail="+str$(MailChoisi%)
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00030000")               : ' est-ce une sélection de pièce jointe ?
      PieceIndex% = USER_EVENT_LPARAM
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,3,PieceIndex%,adr(s$),0,0)
      s$ = trim$(s$)
      if message_confirmation_yes_no("Enregistrer la pièce jointe: "+s$)=1
        s$ = file_extract_path$(param_value$(0))+s$                             : ' extraire la pièce jointe dans le dossier du programme
        res% = dll_call4("ExtractOutlookAttachment",POL%,0,PieceIndex%,adr(s$))
        if res%=0
          message "Pièce jointe extraite dans:"+chr$(13)+chr$(10)+s$
        else
          message "Erreur en extraction de pièce jointe"
        end_if
      end_if
      return
    end_if
    
    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00040000")               : ' est-ce une sélection de contact ?
      Contact% = USER_EVENT_LPARAM
      clear 1001
      res% = dll_call3("GetOutlookContact",POL%,Contact%,handle(1001))
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,9)="FullName="
          text 1008,mid$(s$,10,len(s$))
          exit_for
        end_if
      next i%
      message text$(1001)    
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00050000")               : ' est-ce une sélection de dossier dans le sélecteur des dossiers ?
      DossierChoisi% = USER_EVENT_LPARAM                                        : ' USER_EVENT_LPARAM contient l'objet Dossier
      s$ = string$(200," ")
      res% = dll_call6("GetOutlookInformation",POL%,6,DossierChoisi%,adr(s$),0,0)  
      s$ = trim$(s$)
      text 1061,s$
      message "Dossier choisi: "+s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00060000")               : ' est-ce une sélection de compte dans le sélecteur des comptes ?
      CompteParDefaut% = USER_EVENT_LPARAM                                      : ' USER_EVENT_LPARAM contient l'objet Compte
      clear 1001
      res% = dll_call6("GetOutlookInformation",POL%,8,CompteParDefaut%,handle(1001),0,0)  
      s$ = text$(1001)
      message "Compte choisi: "+chr$(13)+chr$(10)+s$
      for i%=1 to count(1001)
        s$ = item_read$(1001,i%)
        if left$(s$,10)="UserName="
          s$ = mid$(s$,11,len(s$))
          exit_for
        end_if
      next i%
      text 1012,s$
      return
    end_if

    if bin_and(USER_EVENT_WPARAM,hex("00FF0000"))=hex("00070000")               : ' est-ce qu'on a reçu de nouveaux mails ?
      ' USER_EVENT_LPARAM contient le nombre de nouveaux mails
'      message str$(USER_EVENT_LPARAM)+" nouveaux mails:"+chr$(13)+chr$(10)+text$(1102)
      if count(1102)>0
        ' traiter les nouvaux mails
        while count(1102)>0
          ' ici, traiter le mail dans item_read$(1102,1)
          mail% = val(item_read$(1102,1))
          Sujet$ = string$(200," ")
          Expediteur$ = string$(200," ")
          Adresse$ = string$(200," ")
          res% = dll_call6("GetOutlookInformation",POL%,10,mail%,adr(Sujet$),adr(Expediteur$),adr(Adresse$))
          Sujet$ = trim$(Sujet$)
          Expediteur$ = trim$(Expediteur$)
          Adresse$ = trim$(Adresse$)
          message "Mail reçu: "+Sujet$+chr$(13)+chr$(10)+"De: "+Expediteur$+"       Mail: "+Adresse$+chr$(13)+chr$(10)+"   Objet mail="+str$(MailChoisi%)        
          ' et le supprimer de la liste
          item_delete 1102,1
        end_while
      end_if
      return
    end_if

  end_if
  return
  
navigation_reception:
  if POL%=0 then return
  s$ = "Boîte de réception"
  res% = dll_call3("SelectOutlookFolder",POL%,adr(s$),1)
  return
  
navigation_contacts_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,0)
  return
  
navigation_contacts_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookContacts",POL%,1)
  return
  
navigation_dossier_oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,1)
  return
  
navigation_dossier_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookFolderSelector",POL%,0)
  return
  
navigation_comptes_non:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,0)
  return
  
navigation_comptes_Oui:
  if POL%=0 then return
  res% = dll_call2("ShowOutlookAccounts",POL%,1)
  return
    
information_dossiers_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,0,handle(1001))
  message text$(1001)
  return

information_dossiers_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,1,handle(1001))
  message text$(1001)
  return

information_dossiers_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  message text$(1001)
  return
  
information_comptes_1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,0,handle(1001))
  message text$(1001)
  return

information_comptes_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,1,handle(1001))
  message text$(1001)
  return

information_comptes_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookAccountList",POL%,2,handle(1001))
  message text$(1001)
  return

information_mails_1:
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,0,handle(1001))
  message text$(1001)
  return

information_mails_2:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  message text$(1001)
  return

information_mails_3:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookMailList",POL%,2,handle(1001))
  message text$(1001)
  return
  
information_mail1:
  if POL%=0 then return
  clear 1001
  ' Pour la démo, on choisit le premier mail de la liste.
  ' Mais on pourrait prendre n'importe quel mail entre 1 et count(1001).
  res% = dll_call3("GetOutlookMailList",POL%,1,handle(1001))
  mail% = val(item_read$(1001,1))
  clear 1001
  res% = dll_call3("GetOutlookMailInformation",POL%,mail%,handle(1001))
  message text$(1001)
  return
  
action_vider1:
  if POL%=0 then return
  clear 1001
  res% = dll_call3("GetOutlookFolderList",POL%,2,handle(1001))
  s1$ = ""
  for i%=1 to count(1001)
    if instr(item_read$(1001,i%),"Courrier indésirable")>0
      s1$ = item_read$(1001,i%)
      exit_for
    end_if
  next i%
  i% = instr(s1$,",")
  if i%=0
    message "Dossier non trouvé"
    return
  end_if
  dossier% = val(left$(s1$,i%-1))
  s$ = mid$(s1$,i%+1,len(s1$))
  if message_confirmation_yes_no("Voulez-vous vraiment vider le dossier <"+s$+"> ?")<>1 then return
  res% = dll_call2("EmptyOutlookFolder",POL%,dossier%)
  if res%<0
    message "Erreur en vidant le dossier <"+s$+">"
  else
    message "Le dossier <"+s$+"> a été vidé."
  end_if
  return
  
action_deplacer:
  if POL%=0 then return
  if MailChoisi%=0
    message "Aucun mail choisi"
    return
  end_if
  if DossierChoisi%=0
    message "Aucun dossier choisi"
    return
  end_if
  res% = dll_call3("MoveOutlookMail",POL%,MailChoisi%,DossierChoisi%)
  MailChoisi% = 0
  return
  
action_creer_mail_programme:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),0)    : ' le 0 signifie "pas de fenêtre Outlook de saisie mais envoi direct"
message str$(res%)
  return

action_creer_mail_dialog:
  if POL%=0 then return
  if contact%=0
    message "Il faut choisir un contact d'abord !"
    return
  end_if
  ' préparer les pièces jointes
  clear 1101
  item_add 1101,"KGF.ilb"                                    : ' placer ici le nom d'un fichier des pièce jointe, ou laisser le mémo vide
  '  ... autant de lignes Attachment que nécessaires, une ligne par pièce jointe
  clear 1001
  item_add 1001,"première ligne du mail"
  item_add 1001,"... placer ici le reste du mail"            : ' autant de lignes que nécessaire...
  s$ = "Mail test généré par programme"                      : ' placer ici le sujet du mail
  ' contact% est l'objet contact sélectionné dans le sélecteur des contacts, retourné par USER_EVENT
  res% = dll_call6("SendOutlookMail",POL%,contact%,adr(s$),handle(1101),handle(1001),1)    : ' le  signifie "fenêtre Outlook de saisie"
  if res%=0
    message "Mail envoyé"
  else
    message "Erreur - mail non envoyé"
  end_if
  return
  
action_chercher_contact_nom:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call2("GetOutlookContactByName",POL%,adr(s$))
  return

action_chercher_contact_nom_suivant:
  if POL%=0 then return
  s$ = "Klaus"
  res% = dll_call3("GetNextOutlookContactByName",POL%,contact%,adr(s$))
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Interface avec Outlook - Page 2 Empty
MessageSujet: Re: Interface avec Outlook   Interface avec Outlook - Page 2 Empty

Revenir en haut Aller en bas
 
Interface avec Outlook
Revenir en haut 
Page 2 sur 5Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
 Sujets similaires
-
» extension de l'interface avec les DLL
» extension de l'interface avec les DLL - bis
» Domotique avec Panoramic : Interface RS232 TTL
» Outlook
» Panoramic et Outlook

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: