30/07/2014
Windev et les Api WindowsNb de visiteurs en ligne : 1
>> Introduction << >> Codes et Forum << >> Download <<


Rubrique : 1 - Windows Général       Sujet : Imprimantes
Auteur Message
 °¨¨ JL ¨¨° Posté le : 23/06/2000 12:00:00


****************************************************
Récupération nom imprimante et ajout dans la combo
****************************************************

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

p1 est composé de
    Flags est un entier  
    pDescription est un entier  
    pName est un entier  
    pComment est un entier  
FIN

serv est une chaîne ASCIIZ de 64

AppelDLL32("winspool.drv","EnumPrintersA",0x6,&serv,1,Null,cbBuf,&pbNeeded,&pcReturned)

hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded)

cbBuf = pbNeeded
SI AppelDLL32("winspool.drv","EnumPrintersA",0x6,&serv,1,hmem,cbBuf,&pbNeeded,&pcReturned) ALORS
    adr est un entier   = hmem
    ind est un entier
    POUR ind=1 A pcReturned

        AppelDLL32("kernel32","RtlMoveMemory",&p1,adr,Dimension(p1))

        nomimp est une chaîne ASCIIZ de 128

        SI p1.pname0 ALORS

            nomimp=""
            AppelDLL32("kernel32","RtlMoveMemory",&nomimp,p1.pname ,128)
            SI Taille(SansEspace(nomimp))>0 ALORS
               ListeAjoute("COMBO1",nomimp)
            FIN
        
        FIN

       adr+=16
    FIN
FIN

AppelDLL32("kernel32","GlobalFree",hmem)





**********************************************************
Récupération nom imprimante et port et ajout dans combo2
**********************************************************

ListeSupprimeTout("COMBO2")


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

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

ind est un entier
serveur est une chaîne ASCIIZ de 128
nomimp est une chaîne ASCIIZ de 128
port est une chaîne ASCIIZ de 128

ch est une chaîne

AppelDLL32("winspool.drv","EnumPrintersA",0x6,Null,2,Null,cbBuf,&pbNeeded,&pcReturned)
hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded)
cbBuf = pbNeeded
SI AppelDLL32("winspool.drv","EnumPrintersA",0x6,Null,2,hmem,cbBuf,&pbNeeded,&pcReturned) ALORS

  adr est un entier = hmem

  POUR ind = 1 A pcReturned

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

    AppelDLL32("kernel32","RtlZeroMemory",&serveur,128)
    AppelDLL32("kernel32","RtlMoveMemory",&serveur,p2.pServerName ,128)

    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)
Message("Il y a  "+pcReturned+"  Imprimantes")




********************************************************
Procédure pour avoir le nombre de documents dans le
spooler pour une imprimante
*******************************************************

PROCEDURE nbdocument(imprimante)

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

nboctets1 est un entier  
nboctets2 est un entier  
hwndimp est un entier  
err est un entier  
nbdoc est un entier

imp est une chaîne ASCIIZ de 128=imprimante

SI AppelDLL32("winspool.drv","OpenPrinterA", &imp , &hwndimp , Null ) ALORS

  AppelDLL32("winspool.drv","GetPrinterA", hwndimp , 2 , &p2 , 0 , &nboctets1 )

  hmem est un entier   = AppelDLL32("kernel32","GlobalAlloc",0x40,nboctets1)

  SI AppelDLL32("winspool.drv","GetPrinterA", hwndimp , 2 , hmem , nboctets1 , &nboctets2 )
    AppelDLL32("kernel32","RtlMoveMemory",&p2,hmem,Dimension(p2))
    nbdoc = p2.cJobs
  SINON
    nbdoc=-1
  FIN

  AppelDLL32("kernel32","GlobalFree",hmem)
  AppelDLL32("winspool.drv","ClosePrinter",hwndimp)
FIN
RENVOYER(nbdoc)




****************************************************
Affichage des documents du spooler imprimante dans
une table
****************************************************

job1 est composé de
  JobId est un entier  
  pPrinterName est un entier  
  pMachineName est un entier  
  pUserName est un entier  
  pDocument est un entier  
  pDatatype est un entier  
  pStatus est un entier  
  Status est un entier  
  Priority est un entier  
  Position1 est un entier  
  TotalPages est un entier  
  PagesPrinted est un entier  
  wYear est un entier sur 2 octets
  wMonth est un entier sur 2 octets
  wDayOfWeek est un entier sur 2 octets
  wDay est un entier sur 2 octets
  wHour est un entier sur 2 octets
  wMinute est un entier sur 2 octets
  wSecond est un entier sur 2 octets
  wMilliseconds est un entier sur 2 octets
FIN    


numjob est un entier
buf est un entier
pcneed, pcreturn est un entier  

impr est une chaîne ASCIIZ de 128 = *** nom de l'imprimante
hwndimp est un entier  
ch est une chaîne ASCIIZ de 256
t1 est une chaîne

nbdoc est un entier = nbdocument(impr) // voir procédure précédente

SI nbdoc>0 ALORS
  AppelDLL32("winspool.drv","OpenPrinterA", &impr , &hwndimp , Null)

  AppelDLL32("winspool.drv","EnumJobsA", hwndimp , 0 , nbdoc , 1 , Null , 0 , &pcneed , Null)
  buf = pcneed
  hmem est un entier = AppelDLL32("kernel32","GlobalAlloc",0x40,pcneed)

  AppelDLL32("winspool.drv","EnumJobsA", hwndimp , 0 , nbdoc , 1 , hmem , buf , &pcneed , &pcreturn)

  ind est un entier
  adr est un entier = hmem
  POUR ind = 0 A pcreturn-1

    AppelDLL32("kernel32","RtlMoveMemory",&job1,adr,Dimension(job1))

    t1=job1.JobId+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.pPrinterName,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.pMachineName,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.pUserName,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.pDocument,256)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.pDatatype,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.TotalPages,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.PagesPrinted,128)
    t1+=ch+" - "

    AppelDLL32("kernel32","RtlMoveMemory",&ch,job1.PStatus,128)
    t1+=ch+" - "

    t1+=job1.Status+" - "
    t1+= job1.wDay +"/"+ job1.wMonth +"/"+ job1.wYear +"  "+ job1.wHour +":"+ job1.wMinute +":"+ job1.wSecond

    TableAjoute("TABLE2",t1)

    adr+=Dimension(job1)

  FIN

FIN
AppelDLL32("kernel32","GlobalFree",hmem)
AppelDLL32("winspool.drv","ClosePrinter",hwndimp)





******************************************
Récupérer les propriétés de l'imprimante
******************************************

DEVMODE est une structure
  dmDeviceName est une chaîne ASCIIZ de 32
  dmSpecVersion est un entier sur 2 octets
  dmDriverVersion est un entier sur 2 octets
  dmSize est un entier sur 2 octets
  dmDriverExtra est un entier sur 2 octets
  dmFields est un entier  
  dmOrientation  est un entier sur 2 octets
  dmPaperSize est un entier sur 2 octets
  dmPaperLength est un entier sur 2 octets
  dmPaperWidth  est un entier sur 2 octets
  dmScale est un entier sur 2 octets
  dmCopies est un entier sur 2 octets
  dmDefaultSource est un entier sur 2 octets
  dmPrintQuality est un entier sur 2 octets
  dmColor est un entier sur 2 octets
  dmDuplex est un entier sur 2 octets
  dmYResolution est un entier sur 2 octets
  dmTTOption  est un entier sur 2 octets
  dmCollate est un entier sur 2 octets
  dmFormName est une chaîne ASCIIZ de 32
  dmUnusedPadding  est un entier  
  dmBitsPerPel est un entier  
  dmPelsWidth est un entier  
  dmPelsHeight est un entier  
  dmDisplayFlags est un entier  
  dmDisplayFrequency est un entier  
FIN

d1 est un DEVMODE

d2 est un DEVMODE

hwndimp est un entier  
err est un entier  

imp est une chaîne ASCIIZ de 128 = *** Nom de l'imprimante

AppelDLL32("winspool.drv","OpenPrinterA", &imp , &hwndimp , Null )

AppelDLL32("winspool.drv","DocumentPropertiesA", Handle() , hwndimp , &imp, &d1 , &d2,  2 )

// Voir aussi la boite de dialogue de configuration de l'imprimante
// AppelDLL32("winspool.drv","PrinterProperties", Handle(),hwndimp )

AppelDLL32("winspool.drv","ClosePrinter",hwndimp)

ch est une chaîne = "Name : "+d1:dmDeviceName
ch+=RC+"Version : "+d1:dmSpecVersion
ch+=RC+"Driver version : "+d1:dmDriverVersion
ch+=RC+"Size : "+d1:dmSize
ch+=RC+"Driver Extra : "+d1:dmDriverExtra
ch+=RC+"Fields : "+d1:dmFields
ch+=RC+"Orientation : "+d1:dmOrientation
ch+=RC+"PaperSize : "+d1:dmPaperSize
ch+=RC+"PaperLength : "+d1:dmPaperLength
ch+=RC+"Paperwidth : "+d1:dmPaperWidth
ch+=RC+"Scale : "+d1:dmScale
ch+=RC+"Copies : "+d1:dmCopies

ch+=RC+"Qualité : "+d1:dmPrintQuality
ch+=RC+"FormName : "+d1:dmFormName
Info(ch)





**********************************
Purger le spooler d'impression
**********************************

hwndimp est un entier  
err est un entier  
imp est une chaîne ASCIIZ de 128= *** Nom de l'impriamnte

SI AppelDLL32("winspool.drv","OpenPrinterA", &imp , &hwndimp , Null ) ALORS

  SI AppelDLL32("winspool.drv","SetPrinterA", hwndimp ,0 , 0 , 3 )
    Message("OK")
  SINON
    err=AppelDLL32("kernel32","GetLastError")
    Erreur(err)
  FIN

  AppelDLL32("winspool.drv","ClosePrinter",hwndimp)
FIN





**********************************
Lister les différents ports
**********************************

port2 est composé de
  pPortName est un entier  
  pMonitorName est un entier  
  pDescription est un entier  
  fPortType est un entier  
  Reserved est un entier  
FIN

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

AppelDLL32("winspool.drv","EnumPortsA",Null,2,Null,cbBuf,&pbNeeded,&pcReturned)

hmem est un entier = AppelDLL32("kernel32","GlobalAlloc",0x40,pbNeeded)
cbBuf = pbNeeded
AppelDLL32("winspool.drv","EnumPortsA",Null,2,hmem,cbBuf,&pbNeeded,&pcReturned)

ind est un entier
port est une chaîne ASCIIZ de 64
ch est une chaîne

adr est un entier = hmem

POUR ind = 1 A pcReturned

  AppelDLL32("kernel32","RtlMoveMemory",&port2,adr,20)

  AppelDLL32("kernel32","RtlZeroMemory",&port,64)
  AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pPortName ,64)

  ch = port + " - "

  AppelDLL32("kernel32","RtlZeroMemory",&port,64)
  AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pMonitorName ,64)
  ch += port + " - "

  AppelDLL32("kernel32","RtlZeroMemory",&port,64)
  AppelDLL32("kernel32","RtlMoveMemory",&port,port2.pDescription ,64)
  ch += port + " - "

  TableAjoute("TABLE2",ch)

  adr+=20

FIN
AppelDLL32("kernel32","GlobalFree",hmem)

Message("Il y a  "+pcReturned+" ports ")