Présentation

Samedi 10 mars 2007

Je ne résiste pas au plaisir d'écrire un petit article technique sans prétention. Foxpro étant un environnement très complet, nous n'utilisons que très peu les API ou autres composants externes. Aussi, je suis assez fier du bout de code suivant.

Nous gérons pas mal de document par automation (essentiellement word et excel), et des pdf. Le problème posé est d'imprimer sans visualiser la fenêtre du document. Voila la solution mise en oeuvre:

M.oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2")

*-- Collection des imprimantes connectées sur le poste
M.oPrinters = M.oWMI.ExecQuery("Select * from Win32_Printer")

*-- Détermination de l'imprimante par défaut
For Each M.oPrinter In M.oPrinters
    
If oPrinter.Default
          M.oPrinterDefault = M.oPrinter
          exit
     endif
Next

*-- Choix de l'imprimante
M.cImpChoix = GETPRINTER()

*-- Fixer l'imprimante à utiliser
For Each M.oPrinter in M.oPrinters
    
if M.oPrinter.name= M.cImpCHoix
          M.oPrinter.SetDefaultPrinter()
          exit
     Endif
Next

*
*-- Le code réalisant l'impression est là
*--

*-- restauration de l'imprimante par default initiale
M.oPrinterDefault.SetDefaultPrinter()

Par Jean BRUN - Publié dans : jean.brun
Ecrire un commentaire - Voir les 4 commentaires - Recommander
Retour à l'accueil

Commentaires

Jean,

Pour obtenir la liste des imprimantes disponibles il suffit d'utiliser la fonction APRINTERS de VFP.
Pour connaître l'imprimante par défaut de Windows il faut lire la valeur de SET("PRINTER",3).
Enfin pour définir l'imprimante par défaut de Windows, il faut utiliser la fonction de l'API suivante :
DECLARE INTEGER SetDefaultPrinter IN winspool.drv AS SetDefaultPrint STRING pszPrinter .

Cela évite de passer par WMI qui n'est pas toujours installé.
Commentaire n°1 posté par Christophe Chenavier le 12/03/2007 à 09h11

Salut Christophe, et bienvenue ici en tant que 1er commentaire d\\\'un visiteur. Ca s\\\'arrose aux prochaines rencontres AtoutFox.


Pour l\\\'imprimante défaut c\\\'est celle de Windows qu\\\'il me fallait, donc plutôt set(\\\'printer\\\',2).


Sinon, c\\\'est clair que c\\\'est plus simple (d\\\'autant que l\\\'on a pas besoin de la liste des imprimantes, getprinter() le fait ).


Mais je suis en train de regarder WMI, pour faire des utilitaires sur le réseau, du style permettre à un non administrateur de déverouiller un compte bloqué, d\\\'ou son utilisation ici.

Commentaire n°2 posté par jean.brun le 12/03/2007 à 10h12
Salut Jean, et merci du lien vers http://www.cyberfoxpro.com/goupil/
sur ton blog.
Ce petit réseau francophone renforcera, j'en suis sur, le regard sur notre outil préféré.
Je te recommande le blog de joêl, http://www.cyberfoxpro.com/joel/  spécialement dédié  à VFP et le SQL.
A plus
Bien amicalement,
Richard
Commentaire n°3 posté par Goupil le 14/03/2007 à 18h50
En passant, on félicitera Christophe pour la pertinence de ses remarques, et la clarté de son code sur les Contributions AtoutFox.
Richard
Commentaire n°4 posté par Goupil le 14/03/2007 à 18h55
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus