Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 0:47
@Klaus :
Une petite coquille s'est glissée dans le source de démo : un point-virgule a pris la place d'une virgule à la ligne 11.
J'ai bien téléchargé la dernière version de KGF (fichier du 01/03/2021 23h43).
J'ai bien mis le nom exact du dossier en respectant la casse :
Mais malheureusement le timer ne détecte pas les nouveaux entrants.
Peut-être un problème de format de date ? (format Français vs format Anglais) :
Pour ce soir il trop trop tard pour continuer les tests.
Demain soir, j'essaierai de télécharger Outlook version Fr.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 1:01
Oui, j'avais déjà détecté cette coquille et elle a été corrigée dans le source posté ci-dessus.
Voici ce que ça donne chez moi:
Code:
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
Lancement du programme de démo:
Envoi d'un mail de test vers ma propre adresse mail, attente d'une minute environ:
Cosultation de la clé registre par le menu "Fichier": On voit parfaitement le format de la date et de l'heure - ça doit être conforme à cela !
EDIT du 02/03/2021 à 02:01 heures: J'ai corrigé une petite anomalie dans KGFdll. A recharger...
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 7:07
@Klaus
Suite des tests, configuration de ce matin :
- KGF mis à jour (fichier daté du 02/03/2021 à 01:58) ;
- Outlook actif ;
- Interface avec Outlook active avec le dossier de réception correctement orthographié.
J'envoie des messages par mail. Quelques minutes après, Outlook les réceptionne et émet une petite "musique" pour informer l'arrivée de nouveaux messages.
Je patiente 10 minutes. Pas de message de la part de l'interface avec Outlook.
Voici la copie de la consultation de la clé de registre après 10 minutes d'attente et Outlook resté actif :
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 8:46
Ah oui, là, il y a un problème avec le registre ! Peux-tu arrêter le rpogramme de démo, puis le relancer et, avant même de créer l'interface, regarder le regsitre par le menu Fichier ? Normalement, lors d l'arrêt du programme, le registre est actualisé... La valeur importante est DoRecoverMissedMails qui doit être -1 si tout fonctionne bien. D'ailleurs, tu peux vérifier aussi par RegEdit: - ruche = HKEY_CURRENT_USER - clé = SOFTWARE\KGF\OutlookInterface\ - valeurs = DoRecoverMissedMails et LastCheckTime
Cette structure est mise à jour lors de l'arrêt du programme.
EDIT le 02/03/2021 à 10:32
J'ai fait une modification dans KGF.dll pour signaler clairement si l'accès en lecture ou écriture du registre échoue.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 14:08
Bon, j'ai complètement changé mon fusil d'épaule ! On n'utilise plus le registre, et, par là, j'évite les éventuels problèmes de droits d'accès au registre. Maintenant, le programme crée et maintient un fichier INI dans le dossier où se trouve KGF.dll. Ce fichier s'appelle KGF_dll.ini. Il contientdra une "section" pour tous les modules qui ont besoin d mémoriser leurs paramètres. Pour le moment, seule l'interface Outlook est concrnée, mais cela va s'étendre:
Le programme de démo est inchangé, mais il faut recharger la DLL. Un autre effet de cette modification est que, dès la création de l'interface, les mails arrivées depuis le précédent arrêt du programme sont signalés immédiatement sans plus attendre.
Dite-moi si ça va mieux maintenant, après avoir rechargé KGF.dll.
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 15:03
Je n'avais pas réessayé depuis un moment, j'attendais que tu ais fini... ( ) Dis donc, ça commence à avoir de la gueule ! Ca affiche même les images, c'est génial !
Il y a des grands blancs entre certains textes ? Peut-être est-ce la place des pubs qui sont supprimés...?
A noter encore des erreurs : Je clique sur un élément de la boîte de réception, Il apparaît le panneau suivant : Si je clique sur oui, alors là, c'est la cata, plus rien ne marche j'ai été obligé d'arrêter de force et de supprimer Chess_48.ilb et KGF_dll.ini pour que ça remarche. Et si je clique sur non, là ça marche avec des textes et des images très espacées,par contre, quand après, je clique sur un autre élément de la boîte de réception et ça ne marche plus, ça fait tout le temps : J'espère que toutes ces remarques vont t'aider à faire un super programme !
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 15:35
@jjn4: Merci d'avoir testé. Le problème avec les clics dans le corps des Emails est que je les affiche en format HTML dans un WebBrowser. Mais c'est le corps du mail, pa sune page internet complète. Et, dans certains cas, il manque les fichiers annexes qui sont normalement chargés automatiquement par l'explorer. De plus, certaines images sont "bloquées" (affichées sous forme d'une petite croix sur und blanc ou rouge). Là, c'est de mécanisme de sécurité d'Iinternet Explorer (qui est la base de WebBrowser) qui bloque et il n'y a pas moyen de contourner cela.
D'ailleurs, ça doit être similaire pour un composant HVIEWER en Panoramic - certains liens ne fonctionnent pas normalement.
Bien sûr, je pourrais bloquer le clic dans la partie affichage du mail ce qui résoudrait le problème. Si tu as une meilleure solution, je suis preneur...
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 18:37
Bonsoir à tous !
@Klaus "...le programme crée et maintient un fichier INI dans le dossier où se trouve KGF.dll" ===> Ok !
"...les mails arrivées depuis le précédent arrêt du programme sont signalés immédiatement sans plus attendre." ===> Ok !
Les mails entrants arrivés entre-temps et signalés par Outlook, ne sont pas détectés par l'interface.
Après 10 minutes d'attente, voici le contenu du fichier kgf_dll.ini :
Précisions / rappel : Pour effectuer les tests, je suis sous Windows 10 version Fr et Outlook version En.
lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 19:17
Bonsoir Klaus.
Je voudrais tester la dernière mouture du programme, mais je ne sais pas quoi mettre dans la zone
Mettre le nom exact de votre dossier de réception
Merci de ne me dire à quoi cela correspond.
Bonne soirée
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mar 2 Mar 2021 - 21:32
Le nom extact de la boite de réception ? Ben, c'est le nom du dossier dans lequel tes mails arrivent. Chez moi, c'est: "Boîte de réception" en tenant compte des majuscules et des accents !
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 1:01
Sécurisation de 'interface Outlook lors d'un clic sur un lien:
J'ai totalement bloqué le clic sur un lien quelconque. Les images sont bien affichées pourvu qu'elles soient accessibles. On peut cliquer partout, surligner du texte, copier/coller du texte ailleurs, mais aucun lien externe ne réagira.
Ceci résout le problème de plantage lors du clic sur certains liens.
Il suffit de recharger KGF.dll.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 1:23
@Marc: Je pense que le fichier KGF_dll.ini que tu montres, reflète la situation après le démarrage du programme de démo pour la toute première fois après le téléchargement de la version KGF.dll qui bascule d'une clé registre vers un fichier INI.
As-tu essayé de sortir du programme "normalement", puis regarder le fichier à nouveau ? A la sortie du programme, le fichier est mis à jour, avec une date et heure valide. A partir de ce moment, ça devrait rester cohérent.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 9:11
J'ai "amélioré" la gestion d'un clic sur un lien.
Le lien est maintenant bien ouvert, mais pas dans le WebBrowser. Il est ouvert dans le browser par défaut du système, ou dans EDGE, selon la situation. Il ne devrait plus y avoir de problèmes.
Il faut recharger KGF.dll. Le programme de démo a légèrement changé:
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
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_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
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 10:06
Bonjour Klaus !
Citation :
As-tu essayé de sortir du programme "normalement"
Ah mince ! je me suis fait piéger ! Je suis sorti par la croix donc sans passer par le s/p "sortir".
Donc en sortant correctement, le couple date/heure du fichier KGF_DLL.ini est correct.
Je vais ajouter dans le source la ligne "on_close 0,sortir" avant de refaire une bêtise.
Résultats des nouveaux tests :
"...les mails arrivées depuis le précédent arrêt du programme sont signalés immédiatement sans plus attendre." ===> Ils sont bien présents dans le dossier de réception mais ne sont pas signalés comme nouveaux : Absence de messages d'information.
Les mails entrants arrivés entre-temps et signalés par Outlook, ne sont pas détectés par l'interface. Dans le source, le dossier de réception est correctement nommé en respectant la casse : "Inbox"
...
Après 10 minutes d'attente, voici le contenu du fichier kgf_dll.ini avant de sortir de l'interface :
et après avoir quitté l'interface à 9h53 :
En espérant que tout ceci puisse t'aider et que ce ne soit pas une erreur de mes manipulations.
Bonne continuation !
EDIT : je viens de rectifier l'heure ci-dessus "...après avoir quitté l'interface à 9h53" au lieu de 10h53 !
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 10:15
Gloups !
Pardon Klaus, je me suis trompé lors de mes essais, ne pas tenir compte des parties biffées de mon message ci-dessus.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 10:47
Tu as raison - ça manquait dans le programme de démo.
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
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_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
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 11:09
Je reprends la suite de mes essais :
"...les mails arrivées depuis le précédent arrêt du programme sont signalés immédiatement sans plus attendre." ===> Ok !
Les mails entrants arrivés entre-temps et signalés par Outlook, ne sont pas détectés par l'interface. Le code-source est bien configuré avec le dossier de réception "Inbox"
Je me suis envoyé un mail reçu à 10h29 dans Outlook. Il est 10h49 et n'est pas signalé ni présent dans l'interface pour Outlook.
Voici le contenu de KGF_DLL.ini avant fermeture de l'interface :
Après la sortie correcte de l'interface à 10h55 :
10h57 : je relance l'interface. Le message de 10h29 m'est bien signalé comme nouveau mail entrant.
11h03 : je quitte l'interface. Contenu du fichier .ini :
En conclusion, sauf erreur de ma part, les mails entrants arrivés entre-temps ne sont pas détectés dans ma configuration.
Bonne continuation !
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 11:29
Citation :
Après la sortie correcte de l'interface à 10h55 :
Tu as une heure de 10:20:02.
10h57 : je relance l'interface. Le message de 10h29 m'est bien signalé comme nouveau mail entrant.
Il semble donc normal qu'un mail enregistré à 10:29 ne soit pas encore pris en compte à ce moment...
Je continue les tests chez moi. Cependant, lorsque je m'envoie un mail, puis je fais envoyer/recevoir dans Outlook, j'ai le signalement du mail reçu une ou deux minutes lus tard, le temps de réaction du timer...
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 11:51
Citation :
Il semble donc normal qu'un mail enregistré à 10:29 ne soit pas encore pris en compte à ce moment...
Oui, mais cela prouve qu'entre temps le timer n'a pas fait son travail chez moi.
Marc a écrit:
Je me suis envoyé un mail reçu à 10h29 dans Outlook. Il est 10h49 et n'est pas signalé ni présent dans l'interface pour Outlook.
Situation de départ et chronologie :
- Outlook actif - Interface pour Outlook active
Je m'envoie un message à 10h29. Il est reçu par Outlook une grosse poignée de secondes plus tard.
==> A 10h49, il n'était toujours signalé par l'interface. <=== Problème "timer" ?
Je pense que le timer aurait dû m'informer dans les quelques minutes après 10h29 qu'un nouveau message était arrivé dans Outlook.
Je quitte l'interface à 10h55 sans avoir été notifié du mail de 10h29.
Je relance l'interface à 10h57. Là, j'ai bien une notification pour mon message de 10h29 : ce qui est normal puisque le "timer" ne l'avait pas signalé.
11h03, je quitte l'interface.
Voilà pour la séquence précédente. Je refais un essai maintenant...
Dernière édition par Marc le Mer 3 Mar 2021 - 12:14, édité 1 fois
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 12:13
Nouvel essai
Outlook et l'interface pour Outlook actifs.
Chronologie :
- 11h55 je m'envoie un nouveau message - 11h55 Outlook le reçoit et émet une petite musique. - 12h00 toujours pas de nouvelle de l'interface, je patiente encore quelques minutes... - 12h05 toujours pas de nouvelle de l'interface, je quitte l'interface.
Le message de 11h55 ne m'a pas été signalé.
- 12h06 je relance l'interface, aussitôt j'ai une boite de dialogue qui m'informe du mail de 11h55
Fin de l'essai.
Je constate que le "timer" n'a pas effectué sa tâche.
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 12:31
Tu as encore raison !
Lors d'une des multiples modifications, j'avais désactivé le timer...
C'est réparé. J'en ai profité pour apporter 3 améliorations:
1. Ce fichier KGF_dll.ini est maintenant ouvert en permanence dans KGF.dll et accessible à d'autres programmes. Il contient actuellement 1 section avec deux valeurs: c'est la section OutlookInterface. Des programmes Panoramic peuvent ajouter d'autres sections, ajouter des valeurs etc. En avanr-première, voici les fonctions qui gèrent cela:
Code:
res% = dll_call1("GetAllKeysForKGF",handle(memo%)) retourne TOUTES les sections et valeurs res% = dll_call2("GetKeySectionForKGF",adr(section$),handle(dest%)) dest%=memo ou list retourne toutes les valeurs pour la section spécifiée res% = dll_call1("GetListOfKeySectionsForKGF",handle(dest%)) dest%=memo ou list retourne la liste des sections définies dans le fichier ini res% = dll_call2("WriteKeySectionForKGF",adr(section$),handle(memo%)) écrit les valeurs d'une section. Le mémo contient des lignes de type NomValeur=valeur res% = dll_call3("WriteKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$)) crée ou actualise la valeur pour une clé spécifique d'une section spécifique valeur$ = string$(100," ") res% = dll_call3("ReadKeyValueForKGF",adr(section$),adr(cle$),adr(valeur$)) valeur$ = trim$(valeur$ retourne la valeur d'une clé specifique d'une section spécifique
2. L'heure de dernière vérification est mise à jour immédiatement après avoir signalé tous les mails arrivés entre l'arrêt précédent un un nouveau lancement, de sorte à ne pas les signaler deux fois.
3. L'heure de dernière vérification est maintenant immédiatement mise à jour après chaque cycle du timer.
Je pense que là, on a progressé.
lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 13:07
Bonjour Klaus.
Merci pour ta réponse concernant le nom de la Boite de Réception.
Je ne pensais pas du tout à cela lorsque je t'ai demandé le renseignement.
Je pensais que cela était le nom d'une directory ou fichier.
Maintenant que tu viens de faire des modifs il n'y a pas très longtemps, pourrais tu mettre le programme entier pour tester.
Il n'y pas grand monde pour tester.
C'est dommage qu' OSCARIBOUT ne vienne plus sur ce forum. Il aurait testé!!!!
Bon après midi
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 13:25
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
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_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
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
Sujet: re Mer 3 Mar 2021 - 13:50
Salut Klaus.
Je te suggère de mettre une sorte de "disclaimer" le temps de vérifier la présence d' Outlook et un message avant une fermeture automatique si Outlook n'est pas sur la machine.
Comme je ne l'ai pas (Outlook ),le programme plante dès que je lance le menu "Créer l'interface".
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
Sujet: Re: Interface avec Outlook Mer 3 Mar 2021 - 14:06
Bonne idée, Yannick !
Voilà qui est fait. Recharge KGF.dll et utilise la version actualisée du programme de démo:
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) if POL%=0 message "Erreur en création de l'interface Outlook" return end_if 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
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_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