PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Connaître l'état d'une imprimante
Connaître l'état d'une imprimante
Iniciado por Arnaud Marchais, jun., 02 2005 6:44 PM - 4 respostas
Publicado em junho, 02 2005 - 6:44 PM
Bonjour,

Je souhaite savoir comment faire pour connaître l'état d'une
imprimante sélectionnée dans un programme en Windev 9. En effet, la
fonction iListeImprimante me retourne la liste des imprimantes
installées sur le poste où l'application développée est lancée, et
lorsque j'utilise la fonction iConfigure sur une imprimante de ces
imprimantes, elle me retourne Vrai (et donc m'indique que le changement
d'imprimante s'est bien effectué)qu'elle soit en état "prêt", "hors
connexion", "connexion impossible" ou encore "accès refusé".

Merci d'avance pour la réponse.
Publicado em junho, 03 2005 - 12:30 AM
Bonsoir,

Essayez avec la fonction :
<Résultat> = iInfoImprimante([<Imprimante en cours> [, <Type d'information>]])

Bonne chance
--------------
//**//
Publicado em junho, 03 2005 - 4:22 PM
Merci pour la réponse, mais iInfoImprimante ne me retourne que le nom, le driver
, et le port de l'imprimante par défaut ou définie par le dernier iConfigure effectué.

PCSoft m'a répondu qu'on pourrait avoir l'état de l'imprimante par les API Windows,
mais ils n'ont pas pu me donner les infos nécessaires car il ne les connaissaient pas.

Mais là c'est un grand mystère pour moi car je n'ai pas encore mis le nez dans les API.
Publicado em junho, 04 2005 - 4:34 AM
Bonjour,

Regardes du coté des APIs OpenPrinter et GetPrinter
avec la structure Printer_INfo_2
Cette structure contient le statut de l'imprimante...
Publicado em junho, 13 2005 - 6:10 PM
Désolé j'ai mis un peut de temps mais voila le bazard
une collection de procédure PRINTER il y a du rab
FUNCTION PRINTERGetStatus(pPrinter=iInfoImprimante())
Etat d'une imprimante d'un réseau ou local
FUNCTION GetJobInPrinter(pPrinterName=iInfoImprimante())
Liste des jobs dans la file d'attente d'une imprimante
FUNCTION PRINTERGetNumberOfJob(pPrinterName=iInfoImprimante()) Nombre de
job dans la file d'attente d'une imprimante



-------------------
DECLARATION
-------------------
CONSTANT
PRINTER_ENUM_DEFAULT = 0x00000001
PRINTER_ENUM_LOCAL = 0x00000002
PRINTER_ENUM_CONNECTIONS = 0x00000004
PRINTER_ENUM_FAVORITE = 0x00000004
PRINTER_ENUM_NAME = 0x00000008
PRINTER_ENUM_REMOTE = 0x00000010
PRINTER_ENUM_SHARED = 0x00000020
PRINTER_ENUM_NETWORK = 0x00000040
PRINTER_ENUM_EXPAND = 0x00004000
PRINTER_ENUM_CONTAINER = 0x00008000
PRINTER_ENUM_ICONMASK = 0x00ff0000
PRINTER_ENUM_ICON1 = 0x00010000
PRINTER_ENUM_ICON2 = 0x00020000
PRINTER_ENUM_ICON3 = 0x00040000
PRINTER_ENUM_ICON4 = 0x00080000
PRINTER_ENUM_ICON5 = 0x00100000
PRINTER_ENUM_ICON6 = 0x00200000
PRINTER_ENUM_ICON7 = 0x00400000
PRINTER_ENUM_ICON8 = 0x00800000
PRINTER_ENUM_HIDE = 0x01000000

JOB_STATUS_PAUSED = 0x00000001 // Job is paused.
JOB_STATUS_ERROR = 0x00000002 // An error is associated with the
job.
JOB_STATUS_DELETING = 0x00000004 // Job is being deleted.
JOB_STATUS_SPOOLING = 0x00000008 // Job is spooling.
JOB_STATUS_PRINTING = 0x00000010 // Job is printing.
JOB_STATUS_OFFLINE = 0x00000020 // Printer is offline.
JOB_STATUS_PAPEROUT = 0x00000040 // Printer is out of paper.
JOB_STATUS_PRINTED = 0x00000080 // Job has printed.
JOB_STATUS_DELETED = 0x00000100 // Job has been deleted.
JOB_STATUS_BLOCKED_DEVQ = 0x00000200 // The driver cannot print the
job.
JOB_STATUS_USER_INTERVENTION = 0x00000400 // Printer has an error that
requires the user to do something.
JOB_STATUS_RESTART = 0x00000800 // Job has been restarted.
JOB_STATUS_COMPLETE = 0x00001000 // Windows XP: Job is sent to the
printer, but the job may not be printed yet. See Remarks for more
information.

NO_PRIORITY = 0
MAX_PRIORITY = 99
MIN_PRIORITY = 1
DEF_PRIORITY = 1

PRINTER_STATUS_PAUSED = 0x00000001
PRINTER_STATUS_ERROR = 0x00000002
PRINTER_STATUS_PENDING_DELETION = 0x00000004
PRINTER_STATUS_PAPER_JAM = 0x00000008
PRINTER_STATUS_PAPER_OUT = 0x00000010
PRINTER_STATUS_MANUAL_FEED = 0x00000020
PRINTER_STATUS_PAPER_PROBLEM = 0x00000040
PRINTER_STATUS_OFFLINE = 0x00000080
PRINTER_STATUS_IO_ACTIVE = 0x00000100
PRINTER_STATUS_BUSY = 0x00000200
PRINTER_STATUS_PRINTING = 0x00000400
PRINTER_STATUS_OUTPUT_BIN_FULL = 0x00000800
PRINTER_STATUS_NOT_AVAILABLE = 0x00001000
PRINTER_STATUS_WAITING = 0x00002000
PRINTER_STATUS_PROCESSING = 0x00004000
PRINTER_STATUS_INITIALIZING = 0x00008000
PRINTER_STATUS_WARMING_UP = 0x00010000
PRINTER_STATUS_TONER_LOW = 0x00020000
PRINTER_STATUS_NO_TONER = 0x00040000
PRINTER_STATUS_PAGE_PUNT = 0x00080000
PRINTER_STATUS_USER_INTERVENTION = 0x00100000
PRINTER_STATUS_OUT_OF_MEMORY = 0x00200000
PRINTER_STATUS_DOOR_OPEN = 0x00400000
PRINTER_STATUS_SERVER_UNKNOWN = 0x00800000
PRINTER_STATUS_POWER_SAVE = 0x01000000
END

x_SYSTEM_TIME est une structure
wYear est un entier sans signe sur 2 octets
wMonth est un entier sans signe sur 2 octets
wDayOfWeek est un entier sans signe sur 2 octets
wDay est un entier sans signe sur 2 octets
wHour est un entier sans signe sur 2 octets
wMinute est un entier sans signe sur 2 octets
wSecond est un entier sans signe sur 2 octets
wMilliseconds est un entier sans signe sur 2 octets
END

x_JOB_INFO_1 est une structure
JobId est un entier // N° job
pPrinterName est un entier // Pointer Name of the printer for which the
job is spooled
pMachineName est un entier // Pointer Name of the machine that created the
print job.
pUserName est un entier // Pointer Name of the user who owns the print
job.
pDocument est un entier // Pointer Name of the print job (for example,
"MS-WORD: Review.doc").
pDatatype est un entier // Pointer Type of data used to record the print
job.
pStatus est un entier //Pointer to a null-terminated string that
specifies the status of the print job.
//This member should be checked prior to Status and, if pStatus is NULL,
the status
//is defined by the contents of the Status member.
Status est un entier //Specifies the job status
Priority est un entier //Specifies the job priority. This member can be
one of the following values or in the range between 1 through 99
(MIN_PRIORITY through MAX_PRIORITY).
Positi est un entier //Specifies the job's position in the print queue.
TotalPages est un entier //Specifies how many pages the document contains.
This value may be zero if the print job does not contain page delimiting
information.
PagesPrinted est un entier //Specifies the number of pages that have
printed. This value may be zero if the print job does not contain page
delimiting information.
Submitted est une x_SYSTEM_TIME //A SYSTEMTIME structure that specifies the
time that this document was spooled
END

x_PRINTER_INFO_2 est une structure
pServerName est un entier
pPrinterName est un entier
pShareName est un entier
pPortName est un entier
pDriverName est un entier
pComment 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
Status est un entier
cJobs est un entier
AveragePPM est un entier
END

****************************************************************************
****
// 0 c'est qu'il n'y a aucun problème sinon il faut comparer avec la liste
des constantes
// PRINTER_STATUS_xxxxxxx en faisant un EtBinaire
// Exemple je veux savoir si mon imprimante BROPRT219 installée sur le
serveur BROSRV002 a un
// problème de toner je fais :
// EtatPrinter est un entier = PRINTERGetStatus("\\Brosrv002\BROPRT219")
// if ETBinaire(EtatPrinter,PRINTER_STATUS_TONER_LOW)=0 then Info(TonerBas)
//
FUNCTION PRINTERGetStatus(pPrinter=iInfoImprimante())
pPrinterName est une chaîne ASCIIZ sur 256 = pPrinter
phPrinter est un entier = 0
pcbNeeded est un entier = 0
RetCode est un entier
tSTATUS est un tableau dynamique de 100 x_PRINTER_INFO_2
Buf est une chaîne ASCIIZ sur 2048
Etat est un entier = 0

// Ouverture du lien vers l'imprimante phPrinter = handle sur l'imprimante
IF API( "winspool.drv" ,"OpenPrinterA", pPrinterName, &phPrinter, Null) <> 0
THEN
RetCode = API("winspool.drv", "GetPrinterA", phPrinter, 2, &tSTATUS, 0,
&pcbNeeded)
RetCode = API("winspool.drv", "GetPrinterA", phPrinter, 2, &tSTATUS,
pcbNeeded, &pcbNeeded)
IF RetCode<>0 THEN
Etat = tSTATUS[1]:status
END
API("winspool.drv", "ClosePrinter", phPrinter)
END
RENVOYER Etat


****************************************************************************
****
// Renvoie une chaine séparateur TAB avec le nom des fichiers
// en attente d'impression dans le spool de l'imprimante
FUNCTION GetJobInPrinter(pPrinterName=iInfoImprimante())

hdPrint, nbDoc, i, j, pcbNeeded, Ret sont des entiers
PrinterName est une chaîne ASCIIZ sur 512 = pPrinterName
Buf est une chaîne ASCIIZ sur 2048 = ""
ListeDesFichiers est une chaîne = ""
tJOB est un tableau dynamique de 200 x_JOB_INFO_1


Ret = API( "winspool.drv", "OpenPrinterA" , &PrinterName, &hdPrint, Null)
IF Ret = 0 THEN RENVOYER ListeDesFichiers

Ret = API( "winspool.drv", "EnumJobsA", hdPrint, 0, 1000, 1, &tJOB, 1,
&pcbNeeded, &nbDoc)
Ret = API( "winspool.drv", "EnumJobsA", hdPrint, 0, 1000, 1, &tJOB,
pcbNeeded, &pcbNeeded, &nbDoc)
IF Ret=0 THEN
API( "winspool.drv", "ClosePrinter" , hdPrint)
RENVOYER ListeDesFichiers
END

// nbDoc contient le nombre de document
IF nbDoc=0 THEN
API( "winspool.drv", "ClosePrinter" , hdPrint)
RENVOYER ""
END

// tJOB la liste des jobs
FOR i=1 TO nbDoc
WHEN EXCEPTION IN
Transfert(&Buf,tJOB[i]:pDocument,2047)
ListeDesFichiers += Buf+TAB
DO
ListeDesFichiers = ""
SORTIR
END
END

API( "winspool.drv", "ClosePrinter" , hdPrint)

RENVOYER ListeDesFichiers

****************************************************************************
****
// Renvoie le nombre de job d'une file d'attente d'imprimante
FUNCTION PRINTERGetNumberOfJob(pPrinterName=iInfoImprimante())
hdPrint, nbDoc, i, j, pcbNeeded, Ret sont des entiers
PrinterName est une chaîne ASCIIZ sur 512 = pPrinterName
Buf est une chaîne ASCIIZ sur 2048 = ""
ListeDesFichiers est une chaîne = ""
tJOB est un tableau dynamique de 200 x_JOB_INFO_1


Ret = API( "winspool.drv", "OpenPrinterA" , &PrinterName, &hdPrint, Null)
IF Ret = 0 THEN RENVOYER ListeDesFichiers

Ret = API( "winspool.drv", "EnumJobsA", hdPrint, 0, 1000, 1, &tJOB, 1,
&pcbNeeded, &nbDoc)
Ret = API( "winspool.drv", "EnumJobsA", hdPrint, 0, 1000, 1, &tJOB,
pcbNeeded, &pcbNeeded, &nbDoc)
IF Ret=0 THEN
API( "winspool.drv", "ClosePrinter" , hdPrint)
RENVOYER 0
END
API( "winspool.drv", "ClosePrinter" , hdPrint)
RENVOYER nbDoc

"Arnaud Marchais" <a.marchais@autosur.com> a écrit dans le message de
news:429f0f1a$1@news.pcsoft.fr...

Bonjour,

Je souhaite savoir comment faire pour connaître l'état d'une
imprimante sélectionnée dans un programme en Windev 9. En effet, la
fonction iListeImprimante me retourne la liste des imprimantes
installées sur le poste où l'application développée est lancée, et
lorsque j'utilise la fonction iConfigure sur une imprimante de ces
imprimantes, elle me retourne Vrai (et donc m'indique que le changement
d'imprimante s'est bien effectué)qu'elle soit en état "prêt", "hors
connexion", "connexion impossible" ou encore "accès refusé".

Merci d'avance pour la réponse.