Page 1 sur 1
[..] Transfert d'information de outlook vers un formulaire
Posté : sam. 31 janv. 2015 09:23
par Steelson
Bonjour,
Nouveau sur ce forum parce que je découvre AutoIt et qu'il possède la possibilité d'envoyer des commandes simulant des touches clavier.
J'ai en effet une application professionnelle avec un formulaire à renseigner. Cette application est complètement "encapsulée" de sorte qu'il n'est pas possible de modifier l'interface.
Je cherche à automatiser le renseignement du formulaire à partir d'un mail contenant les informations. Je sais extraire les informations du mail et les mettre dans le presse papier via VBA par exemple. Mais je ne sais pas comment procéder pour lancer le renseignement du formulaire automatiquement à partir du presse-papier. Les différentes données peuvent être séparées de | par exemple et le presse-papier commencer par un mot clé.
Il y a aussi peut-être d'autres idées que le passage du presse-papier ? mais c'est une astuce que j'aime bien et que j'avais utilisée il y a environ 15 ans pour expliciter des termes techniques anglais abrégés et les rendre compréhensibles. C'était avec VB3.
Merci de votre aide.
Je vais de toute façon parcourir le forum et commencer mon apprentissage à AutoIt sur des cas plus simples.
Cordialement
Michel
(nota : c'est mon premier message, je n'ai pas vu de section présentation)
Re: [..] Transfert d'information de outlook vers un formulai
Posté : sam. 31 janv. 2015 10:02
par Y01
Bonjour,
Si l'application peut utiliser les objets COM, plus besoin du presse papiers

Re: [..] Transfert d'information de outlook vers un formulai
Posté : sam. 31 janv. 2015 11:39
par Steelson
Malheureusement non d'après ce que j'en sais !
Re: [..] Transfert d'information de outlook vers un formulai
Posté : sam. 31 janv. 2015 15:57
par Y01
Dans ce cas la, il faudrait mettre en forme les informations du mail dans un fichier INI qui est très bien lisible par AutoIt.
Re: [..] Transfert d'information de outlook vers un formulai
Posté : dim. 01 févr. 2015 08:03
par Steelson
Merci pour les conseils.
Pour mon premier exercice, je vais rester fidèle à ma première idée : utiliser le presse-papier. Pourquoi ?
- mon expérience passée m'a montré que pour de petites applications, c'était pratique
- si excel et outlook peuvent créer un fichier .ini, ce n'est pas le cas d'un navigateur, mais javascript permet de sélectionner un texte en vue de le copier
Je pars donc sur l'idée d'avoir dans le presse-papier :
MAJvisiteur||Martin|Joseph|Microsoft|
où le | sera remplacé par une tabulation pour remplir les différents champs du formulaire.
AutoIt scrutera en permanence le presse-papier pour voir les changements, et si ce dernier contient en tête MAJvisiteur alors il enverra vers la fenêtre ad-hoc les keys correpondant au texte trouvé.
C'est bien beau, mais là je m'attaque à gros pour ma part à ce stade de mes connaissances.
Toute aide est la bienvenue pour me guider.
Amicalement
Michel
Re: [..] Transfert d'information de outlook vers un formulai
Posté : dim. 01 févr. 2015 08:09
par jguinch
Steelson a écrit :J'ai en effet une application professionnelle avec un formulaire à renseigner
Est-ce que tu as essayé d'utiliser l'outil
Autoit Window Info avec ce formulaire ? Ca donne quoi ?
C'est un formulaire de type web ?
Re: [..] Transfert d'information de outlook vers un formulai
Posté : dim. 01 févr. 2015 11:49
par Tlem
Bonjour Michel, vous trouverez ci-dessous une ébauche du traitement du contenu du presse papier. A vous d'adapter à votre guise. Ensuite il vous faudra donner quelques éléments supplémentaires pour le remplissage du formulaire. Il y a sur le forum des tas d'exemples qui devraient vous y aider. Si vous n'y arrivez vraiment pas, utilisez AutoIt Windows Info pour nous donner les éléments nécessaires, dés que quelqu'un en aura connaissance vous aurez sans aucun doute une réponse.
Code : Tout sélectionner
#include <Array.au3>
;MAJvisiteur||Martin|Joseph|Microsoft|
HotKeySet("{ESC}", "Terminate") ; Pour quitter le script appuyez sur ESC.
ClipPut("") ; On vide le presse papier
; Boucle infinie
While 1
Sleep(1000) ; Pause de 1s
$Datas = ClipGet() ; On récupère le contenu du presse papier.
If Not @error Then ; Si pas d'erreur on continue le traitement
If StringInStr($Datas, "MAJvisiteur") Then ; On vérifie le contenu à la recherche de "MAJvisiteur"
$aDatas = StringSplit($Datas, "|") ; Si on a trouvé "MAJvisiteur", on découpe la chaine.
ClipPut("") ; On vide le presse papier
; Ici vous devrez appliquer votre traitement de formulaire avec les données du tableau ci-dessous.
_ArrayDisplay($aDatas, "Données récupérées")
EndIf
EndIf
WEnd
; Fonction pour quitter le script.
Func Terminate()
Exit
EndFunc ;==>Terminate
Re: [..] Transfert d'information de outlook vers un formulai
Posté : dim. 01 févr. 2015 14:53
par Steelson
Génial, merci ... je venais juste de terminer un programme sommaire avec notepad pour la mise à jour fictive ... une grande première (mais sans doute mal écrite !! à ajouter du reste la détection d'une erreur)
J'ai aussi changé le séparateur | en ; compatible avec fichier csv au cas où ...
Code : Tout sélectionner
; lancement Notepad
If Not ProcessExists("notepad.exe") Then
Run("notepad.exe")
WinWaitActive("[CLASS:Notepad]")
$titre = WinGetTitle("[ACTIVE]", "")
$ref = WinGetHandle("[CLASS:Notepad]", "")
EndIf
do
; capture du presse-papier
$param = clipget()
If StringLeft($param,11) = "MAJvisiteur" then
WinActivate($titre, "")
$param = StringRegExpReplace($param,";","{TAB}")
Send($param)
Send("{ENTER}")
ClipPut("")
EndIf
sleep(5000)
until ($param = "STOP")
Re: [..] Transfert d'information de outlook vers un formulai
Posté : lun. 02 févr. 2015 05:00
par Steelson
Je suis en tain de tirer le meilleur de la réponse de Tlem ... et pour continuer, je voulais tester le fichier sous sa forme .exe
Après "compilation", le lancement me répond "Unable to open the script file"
-----------------------------------------------------------
Edit : j'ai recompilé en désactivant Avast! ... c'est ok.
[R] Transfert d'information de outlook vers un formulaire
Posté : sam. 14 févr. 2015 16:13
par Steelson
Je ferme le post, point résolu
Re: [..] Transfert d'information de outlook vers un formulai
Posté : lun. 16 févr. 2015 10:24
par timmalos
C'est peu propre de récuperer le texte du presse papier toutes les X secondes, notamment certains antivirus n'aiment pas trop ca.
On peut remédier à ce problème en créant un script plus propre qui récupère le presse-papier seulement après un changement.
Cf l'aide de
_ClipBoard_SetViewer. Il suffit alors de rajouter votre test de string dans la fonction WM_DRAWCLIPBOARD.
Code : Tout sélectionner
#include <Clipboard.au3>
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>
Global $g_idMemo, $g_hNext = 0
Example()
Func Example()
Local $hGUI
; Create GUI
$hGUI = GUICreate("Clipboard", 600, 400)
$g_idMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
GUISetState(@SW_SHOW)
; Initialize clipboard viewer
$g_hNext = _ClipBoard_SetViewer($hGUI)
GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")
MemoWrite("GUI handle ....: " & $hGUI)
MemoWrite("Viewer handle .: " & _ClipBoard_GetViewer())
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Shut down clipboard viewer
_ClipBoard_ChangeChain($hGUI, $g_hNext)
EndFunc ;==>Example
; Write message to memo
Func MemoWrite($sMessage = "")
GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite
; Handle $WM_CHANGECBCHAIN messages
Func WM_CHANGECBCHAIN($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg
; Show that message was received
MemoWrite("***** $WM_CHANGECBCHAIN *****")
; If the next window is closing, repair the chain
If $wParam = $g_hNext Then
$g_hNext = $lParam
; Otherwise pass the message to the next viewer
ElseIf $g_hNext <> 0 Then
_SendMessage($g_hNext, $WM_CHANGECBCHAIN, $wParam, $lParam, 0, "hwnd", "hwnd")
EndIf
EndFunc ;==>WM_CHANGECBCHAIN
; Handle $WM_DRAWCLIPBOARD messages
Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg
; Display any text on clipboard
MemoWrite(_ClipBoard_GetData())
; Pass the message to the next viewer
If $g_hNext <> 0 Then _SendMessage($g_hNext, $WM_DRAWCLIPBOARD, $wParam, $lParam)
EndFunc ;==>WM_DRAWCLIPBOARD