Récupérer la liste des imprimantes :

cbBuf est un entier long
pbNeeded est un entier long
pcReturned est un entier long

p2 est compose de
   pServerName est un entier long
   pPrinterName est un entier long
   pShareName est un entier long
   pPortName est un entier long
   pDriverName est un entier long
   pCommen est un entier long
   pLocation est un entier long
   pDevMode est un entier long
   pSepFile est un entier long
   pPrintProcessor est un entier long
   pDatatype est un entier long
   pParameters est un entier long
   pSecurityDescriptor est un entier long
   Attributes est un entier long
   Priority est un entier long
   DefaultPriority est un entier long
   StartTime est un entier long
   UntilTime est un entier long
   Stat est un entier long
   cJobs est un entier long
   AveragePPM est un entier long
fin

ind est un entier
nomimp est une chaine asciiz de 128
port est une chaine asciiz de 128
ch est une chaine

appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,null,cbbuf,&pbNeeded,&pcReturned)
hmem est un entier long = appeldll32("kernel32","GlobalAlloc",0x40,pbNeeded)
cbbuf = pbNeeded
si appeldll32("winspool.drv","EnumPrintersA",0x6,null,2,hmem,cbbuf,&pbNeeded,&pcReturned) alors
   adr est un entier long = hmem
   pour ind = 1 a pcReturned

     appeldll32("kernel32","RtlMoveMemory",&p2,adr,84)

     appeldll32("kernel32","RtlZeroMemory",&nomimp,128)
     appeldll32("kernel32","RtlMoveMemory",&nomimp,p2.pPrinterName ,128)

     appeldll32("kernel32","RtlZeroMemory",&port,128)
     appeldll32("kernel32","RtlMoveMemory",&port,p2.pPortName ,128)

     si taille(sansespace(nomimp))>0 alors

       si etbinaire(p2.Attributes,4) alors
         ch="Défaut"
       sinon
         ch=""
       fin
       listeajoute("COMBO2",port+"\"+nomimp+"\"+ch)

     fin

     adr+=84

   fin

fin
appeldll32("kernel32","GlobalFree",hmem)


Afficher la liste des documents dans le spooler d'une imprimante :

imprimante est une chaine asciiz de 128="Nom de l'imprimante"

appeldll32( "shell32.dll" , "SHInvokePrinterCommandA" , handle() , 0 , &imprimante , null , 0 )

Note : Si imprimante réseau : 5 au lieu de 0 (le 1er) et inclure le nom du serveur dans imprimante


Ouvrir la boite de propriétés de l'imprimante :

imprimante est une chaine asciiz de 128="Nom de l'imprimante"

appeldll32( "shell32.dll" , "SHInvokePrinterCommandA" , handle() , 1 , &imprimante , null , 0 )


Imprimer une page de test :

imprimante est une chaine asciiz de 128="Nom de l'imprimante"

appeldll32( "shell32.dll" , "SHInvokePrinterCommandA" , handle() , 4 , &imprimante , null , 0 )