Envoyer des fax en série avec l'imprimante virtuelle de XP
# 0000000745
ajouté le 15/03/2010 09:31:37 et modifié le 15/03/2010
consulté 10168 fois
Niveau
initié
Version(s) Foxpro : VFP 9.0
Description
Cete moulinette permet d'envoyer des fax en série en utilisant l'imprimante virtuelle Fax de Windows XP (installée par défaut si votre ordinateur dispose d'un modem).
Elle n'a pas été testée avec autre chose que XP. Elle est donc a priori à usage interne, pour vos propres envois de fax.
Le principe est le suivant :
- une impression vers fax doit être initiée à la main (ca pourrait se faire automatiquement mais ce n'est pas le propos ici : il faudrait définir l'imprimante par défaut puis lancer l'impression avec ShellExecute : sauf erreur de ma part, d'autres articles traitent de ces aspects)
- la moulinette prépare l'envoi du fax à des destinataires multiples : les N°s de fax sont dédoublonnés et vérifiés avant d'être ajoutés à la liste d'envoi de l'imprimante virtuelle, par détection de la fenêtre de l'imprimante virtuelle fax windows, simulation de l'appui des touches de raccourci des boutons, et utilisation du presse-papier.
NB : il est probable que selon les versions de windows l'IHM du fax virtuel change, et que donc les raccourcis claviers ne sont pas les mêmes et qu'il faille donc adapter le programme en conséquence.
Fax_Demo() est une démonstration du fonctionnement, avec des numéros bidon.
* Lancement du programme de démonstration
Fax_Demo()
*************************************************************************************************************** * Démonstration * LG 20091113 Function Fax_Demo
Local lcCurseur
m.lcCurseur = "MaFaxingList" CreateCursor (m.lcCurseur) (Nom C(50), Fax C(10)) Local liNo, liNb, lcDest, lcNoFax
* Créer 1 curseur avec 10 N°s de fax bidon
m.liNb = 10 For m.liNo = 1 To m.liNb InsertInto (m.lcCurseur) ;
(Nom, Fax) ; Values ;
("Dest N°" + Transform(m.liNo), Transform(10000000000 - m.liNo)) Endfor
* Envoyer les mails
Fax_MailingAvecCurseur(m.lcCurseur)
Ifused(m.lcCurseur) UseIn (m.lcCurseur) Endif
Endfunc
*************************************************************************************************************************************** * * LG 20100125 Function Private_Fax_Init
Private_Fax_InitAPIs()
EndFunc
*************************************************************************************************************** * * LG 20100125 Function Private_Fax_InitAPIs
* Environnement Local lnSele, llKO
m.lnSele = Sele()
DECLARE keybd_event IN user32;
SHORT bVk,;
SHORT bScan,; INTEGER dwFlags,; INTEGER dwExtraInfo DECLAREINTEGER FindWindow IN user32; STRING lpClassName,; STRING lpWindowName DECLARE SHORT VkKeyScan IN user32; INTEGER ch DECLAREINTEGER SetForegroundWindow IN user32 INTEGERhwnd DECLARE Sleep IN Win32API INTEGER nMilliseconds
* Environnement
Sele (m.lnSele)
* Valeur de retour ReturnNot m.llKO
Endfunc
*************************************************************************************************************************************** * * LG 20091113 Function Fax_MailingAvecCurseur Lparameters pcTable, pbSansSetStep, pcFichLogFax
* Demander confirmation IfMessageBox("Envoyer les fax maintenant ?" ;
+ Chr(13) + Chr(13) + "NB : il faut avoir auparavant lancé l'impression d'un document vers le fax, et cliqué sur Suivant pour avoir la fenêtre de saisie des N°s de fax." ;
, 1 + 32, "FaxMailing") = 2 * Annuler Return.F. Endif
* Initialiser les API et Set Proc
Private_Fax_Init()
* Créer le curseur Local lcCurseur
m.lcCurseur = "MaFaxingList" Select Nom as cNom, Fax AS cFax ; From (m.pcTable) ; IntoCursor (m.lcCurseur) ReadWrite
* Recherche des doublons Local lcCurDoublons
m.lcCurDoublons = "curDoublons" Select cFax, Count(*) AS iCnt ; From (m.lcCurseur) ; GroupBy cFax ; Having iCnt > 1 ; IntoCursor (m.lcCurDoublons) IfReccount(m.lcCurDoublons) > 0 * Dédoublonner Local liCnt, liNo, lcFax Select (m.lcCurDoublons) Scan
m.liCnt = iCnt
m.lcFax = cFax Select (m.lcCurseur) For m.liNo = 1 To m.liCnt - 1
Locate For cFax = m.lcFax IfNotFound() SetStepOn Else Delete Gotop Endif EndFor Select (m.lcCurDoublons) Endscan Endif
* Vérifier qu'il n'y a plus de doublons Select cFax, Count(*) AS iCnt ; From (m.lcCurseur) ; GroupBy cFax ; Having iCnt > 1 ; IntoCursor (m.lcCurDoublons) IfReccount(m.lcCurDoublons) > 0 Select (m.lcCurDoublons) Browse Title "Il y a des doublons" SetStepOn Endif
IfNotEmpty(m.lcLstInvalides)
m.lcMsg = "Ok pour " + Transform(m.liNb) + " fax" ;
+ Chr(13) + Transform(m.liNbInvalides) + " N° de fax invalides trouvés (placés dans le presse-papier) : " ;
+ Chr(13) + m.lcLstInvalides _cliptext = m.lcLstInvalides Else
m.lcMsg = "Ok pour " + Transform(m.liNb) + " fax" Endif IfNot m.lbKO
m.lcMsg = m.lcMsg + Chr(13) + Chr(13) + "L'envoi est préparé mais non effectué. Il faut maintenant cliquer sur Valider dans la fenêtre de dislogue de l'imprimante fax." ;
+ Chr(13) + " et attendre que l'envoi de tous les fax soit terminé." Endif
MessageBox(m.lcMsg ;
, 0 + 64, "FaxMailing")
CloseDatabasesall
EndFunc
*************************************************************************************************************** * * LG 20091113 Function Fax_AjouteDestinataire LPARAMETERS pcDestinataire, pcNoFax, pbInvalide
LOCAL lhWindowFax, lbKO * Est-ce la fenetre Assistant Envoi de Télécopie est ouverte ?
m.lhWindowFax = FindWindow(Null, "Assistant Envoi de Télécopie")
IF m.lhWindowFax <> 0
* Vérifier la validité du N° de fax IfNot Fax_CorrigeNo(@pcNoFax)
m.pbInvalide = .T. Return Endif
* Alt+o pour ajouter à la liste des destinataires
KeyBd_SendKey("o", diKeyAlt)
uSleep(100) Else MessageBox("Lancez l'impression vers Fax et cliquez sur Suivant avant de débuter") SetStepOn
m.lbKO = .T. Endif
ReturnNot m.lbKO
Endfunc
*************************************************************************************************************** * Vérifier la validité du N° de fax * LG 20091113 Function Fax_CorrigeNo LPARAMETERS pcNoFax
Local lbKO * Enlever les "."
m.pcNoFax = Strtran(m.pcNoFax, ".", "") * Enlever les "("
m.pcNoFax = Strtran(m.pcNoFax, "(", "") * Enlever les ")"
m.pcNoFax = Strtran(m.pcNoFax, ")", "") * Enlever les "-"
m.pcNoFax = Strtran(m.pcNoFax, "-", "")
*************************************************************************************************************** * * LG 20091113 Function KeyBd_SendKey Lparameters pvLettre, piAltCtrlShift
*************************************************************************************************************** * Mise en attente * LG 20070312 Function uSleep LPARAMETERS piMilliSecondes