PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Prob de recuperation du nb total de page dans un spool (EnumJobsA)
Prob de recuperation du nb total de page dans un spool (EnumJobsA)
Started by romain.frebourg, Apr., 07 2006 6:09 PM - 4 replies
Posted on April, 07 2006 - 6:09 PM
Bonjour,

J'utilise la fonction API EnumJobsA de windev 10, pour récupérer des informations du spool d'une imprimante.
j'arrive à recupérer certain paramètres :

SI pJob[z]:pPrinterName<>0 ALORS Transfert(&Buf,pJob[z]:pPrinterName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pUserName<>0 ALORS Transfert(&Buf,pJob[z]:pUserName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pDocument<>0 ALORS Transfert(&Buf,pJob[z]:pDocument,2047);sListedesfichier += Buf+";"
SI pJob[z]:pNotifyName<>0 ALORS Transfert(&Buf,pJob[z]:pNotifyName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pParameters<>0 ALORS Transfert(&Buf,pJob[z]:pParameters,2047);sListedesfichier += Buf+";"
SI pJob[z]:pDriverName<>0 ALORS Transfert(&Buf,pJob[z]:pDriverName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pStatus<>0 ALORS Transfert(&Buf,pJob[z]:pStatus,2047);sListedesfichier += Buf+";"

// je n'est pas de valeur pour ces deux fonctions, mais pas d'erreur car elles sont null.

SI pJob[z]:StartTime<>0 ALORS Transfert(&Buf,pJob[z]:StartTime,2047);sListedesfichier += Buf+";"
SI pJob[z]:UntilTime<>0 ALORS Transfert(&Buf,pJob[z]:UntilTime,2047);sListedesfichier += Buf+";"

mais pour ceux-ci :
J'ai une erreur du type :
Vous avez appelé la fonction Transfert.
L'adresse source fournie (0x00000007 sur 2047 octets) est invalide. Elle ne représente pas une adresse mémoire valide en lecture.

SI pJob[z]:TotalPages<>0 ALORS Transfert(&Buf,pJob[z]:TotalPages,2047);sListedesfichier += Buf+";"
SI pJob[z]:PagesPrinted<>0 ALORS Transfert(&Buf,pJob[z]:PagesPrinted,2047);sListedesfichier += Buf+";"


Ci dessous mes structures :

//STRUCTURE UTILISER :
DEVMODEA est une structure
dmDeviceName est une chaîne fixe sur 32 //Type C : BYTE
dmSpecVersion est un entier sur 2 octets //Type C : WORD
dmDriverVersion est un entier sur 2 octets //Type C : WORD
dmSize est un entier sur 2 octets //Type C : WORD
dmDriverExtra est un entier sur 2 octets //Type C : WORD
dmFields est un entier sur 4 octets sans signe //Type C : DWORD
dmOrientation est un entier sur 2 octets //Type C : short
dmPaperSize est un entier sur 2 octets //Type C : short
dmPaperLength est un entier sur 2 octets //Type C : short
dmPaperWidth est un entier sur 2 octets //Type C : short
dmScale est un entier sur 2 octets //Type C : short
dmCopies est un entier sur 2 octets //Type C : short
dmDefaultSource est un entier sur 2 octets //Type C : short
dmPrintQuality est un entier sur 2 octets //Type C : short
dmColor est un entier sur 2 octets //Type C : short
dmDuplex est un entier sur 2 octets //Type C : short
dmYResolution est un entier sur 2 octets //Type C : short
dmTTOption est un entier sur 2 octets //Type C : short
dmCollate est un entier sur 2 octets //Type C : short
dmFormName est une chaîne fixe sur 32 //Type C : BYTE
dmLogPixels est un entier sur 2 octets //Type C : WORD
dmBitsPerPel est un entier sur 4 octets sans signe //Type C : DWORD
dmPelsWidth est un entier sur 4 octets sans signe //Type C : DWORD
dmPelsHeight est un entier sur 4 octets sans signe //Type C : DWORD
dmDisplayFlags est un entier sur 4 octets sans signe //Type C : DWORD
dmDisplayFrequency est un entier sur 4 octets sans signe //Type C : DWORD
dmICMMethod est un entier sur 4 octets sans signe //Type C : DWORD
dmICMIntent est un entier sur 4 octets sans signe //Type C : DWORD
dmMediaType est un entier sur 4 octets sans signe //Type C : DWORD
dmDitherType est un entier sur 4 octets sans signe //Type C : DWORD
dmICCManufacturer est un entier sur 4 octets sans signe //Type C : DWORD
dmICCModel est un entier sur 4 octets sans signe //Type C : DWORD
dmPanningWidth est un entier sur 4 octets sans signe //Type C : DWORD
dmPanningHeight est un entier sur 4 octets sans signe //Type C : DWORD
FIN
PRINTER_DEFAULTSA est une structure
pDatatype est un entier //Type C : LPSTR
pDevMode est un entier //LPDEVMODEA Pointeur sur DEVMODEA
DesiredAccess est un entier //Type ACCESS_MASK non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
FIN
//********************** Fin de la déclaration des structures pour <OpenPrinterA>

//********************** Debut de declaration de la structure pour la fonction EnumJob
SYSTEMTIME est une structure
wYear est un entier sur 2 octets //Type C : WORD
wMonth est un entier sur 2 octets //Type C : WORD
wDayOfWeek est un entier sur 2 octets //Type C : WORD
wDay est un entier sur 2 octets //Type C : WORD
wHour est un entier sur 2 octets //Type C : WORD
wMinute est un entier sur 2 octets //Type C : WORD
wSecond est un entier sur 2 octets //Type C : WORD
wMilliseconds est un entier sur 2 octets //Type C : WORD
FIN
JOB_INFO_2A est une structure
JobId est un entier sur 4 octets sans signe //Type C : DWORD
pPrinterName est un entier //Type C : LPSTR
pMachineName est un entier //Type C : LPSTR
pUserName est un entier //Type C : LPSTR
pDocument est un entier //Type C : LPSTR
pNotifyName est un entier //Type C : LPSTR
pDatatype est un entier //Type C : LPSTR
pPrintProcessor est un entier //Type C : LPSTR
pParameters est un entier //Type C : LPSTR
pDriverName est un entier //Type C : LPSTR
pDevMode est un entier //LPDEVMODEA Pointeur sur DEVMODEA
pStatus est un entier //Type C : LPSTR
pSecurityDescriptor est un entier //Type PSECURITY_DESCRIPTOR non retrouvé (entier est le type le plus fréquent, mais à VERIFIER)
Status est un entier sur 4 octets sans signe //Type C : DWORD
Priority est un entier sur 4 octets sans signe //Type C : DWORD
Positions est un entier sur 4 octets sans signe //Type C : DWORD
StartTime est un entier sur 4 octets sans signe //Type C : DWORD
UntilTime est un entier sur 4 octets sans signe //Type C : DWORD
TotalPages est un entier sur 4 octets sans signe //Type C : DWORD
Size est un entier sur 4 octets sans signe //Type C : DWORD
Submitted est un SYSTEMTIME //SYSTEMTIME est une autre structure
Time est un entier sur 4 octets sans signe //Type C : DWORD
PagesPrinted est un entier sur 4 octets sans signe //Type C : DWORD
FIN



CODE UTILISER POUR ENUMERER LES JOBS D'UN SPOOL

PROCEDURE Enumjob(Nomimprimante)
// TEST

nRetourFonction est un entier=0 //
//Paramètre de la fonction API OpenPrinterA
pPrinterName est une chaîne ASCIIZ sur 512 = Nomimprimante // (IN)*** nom de l'imprmante à ouvrir
hdPrint est un entier // (OUT)*** Pointeur sur une variable qui recoit le handle de l'imprimante ouverte
pDefault est un entier = Null // (IN)*** Pointeur sur structure LPPRINTER_DEFAULTSA

nRetourFonction=API("WINSPOOL.DRV","OpenPrinterA",&pPrinterName,&hdPrint,&pDefault)

//Paramètre de la fonction API EnumJobA
hPrinter est un entier // (IN)*** handle de l'imprimante à ouvrir
FirstJob est un entier // (IN)*** =0 specifie que l'énumération des jobs commencent au premier job
NoJobs est un entier // (IN)*** spécifie le nombre de job à enumérer
Level est un entier // (IN)*** specifie le type d'information retourner dans le buffer pjob. (1=JOB_INFO_1,2=JOB_INFO_2,3=JOB_INFO_3)
pJob est un tableau dynamique de 14000 JOB_INFO_2A // (OUT)*** Pointeur d'un buffer qui recoit un tableau d'une structure JOB_INFO_2
cbBuf est un entier // (IN)*** Specifie la taille en bytes du buffer pJob
pcbNeeded est un entier // (OUT)*** Pointer d'une variable qui recoit le nombre de bytes copié si la fonction est OK
// Si la fonction est FAUX alors la variable recoit le nombre de bytes requis
pcReturned est un entier // (OUT)*** Pointeur d'une variable qui recoit le nombre de structure (JOB_INFO_2) retourner dans le buffer pJob

//declaration pour l'extraction du tableau dynamique pJob
z est un entier = 1 //compteur
Buf est une chaîne ASCIIZ sur 2048 = "" // (OUT) pointeur sur une variable contenant le bloc de destination
sListedesfichier est une chaîne //info du spool de l'imprimante



//Si l'immprimante à bien été ouverte
SI nRetourFonction > 0 ALORS
//Lance une fois pour obtenir le nombre d'octet dont on a besoin : pcbNeeded
hPrinter=hdprint //attribution du handle creé par OpenPrint
FirstJob=0
NoJobs00
Level=2
cbBuf=1
nRetourFonction=API("WINSPOOL.DRV","EnumJobsA",hPrinter,FirstJob,NoJobs,Level,&pJob,cbBuf,&pcbNeeded,&pcReturned)
//LAnce une seconde fois pour obtenir le nombre de job dans la file d'attente : pcReturned
nRetourFonction=API("WINSPOOL.DRV","EnumJobsA",hPrinter,FirstJob,NoJobs,Level,&pJob,pcbNeeded,&pcbNeeded,&pcReturned)

nnbdoc est un entier
nnbdoc=pcReturned //Attribution du nombre de Job à la variable nnbdoc

//Si la fonction à fonctionné
SI nRetourFonction > 0 ALORS
SI nnbdoc > 0 ALORS
POUR z=1 A nnbdoc
SI z=1 ALORS
sListedesfichier="PagesPrinted;pDocument;pDriverName;pMachineName;pNotifyName;pParameters;pPrinterName;pStatus;pUserName;Size;StartTime;UntilTime;Time;TotalPages"
SINON
sListedesfichier += CRLF
FIN
SI pJob[z]:pPrinterName<>0 ALORS Transfert(&Buf,pJob[z]:pPrinterName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pUserName<>0 ALORS Transfert(&Buf,pJob[z]:pUserName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pDocument<>0 ALORS Transfert(&Buf,pJob[z]:pDocument,2047);sListedesfichier += Buf+";"
SI pJob[z]:pNotifyName<>0 ALORS Transfert(&Buf,pJob[z]:pNotifyName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pParameters<>0 ALORS Transfert(&Buf,pJob[z]:pParameters,2047);sListedesfichier += Buf+";"
SI pJob[z]:pDriverName<>0 ALORS Transfert(&Buf,pJob[z]:pDriverName,2047);sListedesfichier += Buf+";"
SI pJob[z]:pStatus<>0 ALORS Transfert(&Buf,pJob[z]:pStatus,2047);sListedesfichier += Buf+";"
SI pJob[z]:StartTime<>0 ALORS Transfert(&Buf,pJob[z]:StartTime,2047);sListedesfichier += Buf+";"
SI pJob[z]:UntilTime<>0 ALORS Transfert(&Buf,pJob[z]:UntilTime,2047);sListedesfichier += Buf+";"
SI pJob[z]:TotalPages<>0 ALORS Transfert(&Buf,pJob[z]:TotalPages,2047);sListedesfichier += Buf+";"
SI pJob[z]:Size<>0 ALORS Transfert(&Buf,pJob[z]:Size,2047);sListedesfichier += Buf+";"
SI pJob[z]:Time<>0 ALORS Transfert(&Buf,pJob[z]:Time,2047);sListedesfichier += Buf+";"
SI pJob[z]:PagesPrinted<>0 ALORS Transfert(&Buf,pJob[z]:PagesPrinted,2047);sListedesfichier += Buf+";"

FIN
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
SINON
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
Info("echec1 nbdoc pas supérieur à zero")
FIN
SINON
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
Info("echec2 la fonction API n'a pas fonctionné")
FIN
SINON
Info("Impossible d'ouvrir l'imprimante")
FIN

Je ne comprend pourquoi avec les variables déclarées en temps que DWORD ma fonction transfert retourne le code d'erreur ci-dessus?

Merci d'avance

Romano
Posted on April, 07 2006 - 7:05 PM
Romano a formulé la demande :

Bonjour,

J'utilise la fonction API EnumJobsA de windev 10, pour récupérer des
informations du spool d'une imprimante. j'arrive à recupérer certain
paramètres :

SI pJob[z]:pPrinterName<>0 ALORS
Transfert(&Buf,pJob[z]:pPrinterName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pUserName<>0 ALORS
Transfert(&Buf,pJob[z]:pUserName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pDocument<>0 ALORS
Transfert(&Buf,pJob[z]:pDocument,2047);sListedesfichier += Buf+";" SI
pJob[z]:pNotifyName<>0 ALORS
Transfert(&Buf,pJob[z]:pNotifyName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pParameters<>0 ALORS
Transfert(&Buf,pJob[z]:pParameters,2047);sListedesfichier += Buf+";" SI
pJob[z]:pDriverName<>0 ALORS
Transfert(&Buf,pJob[z]:pDriverName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pStatus<>0 ALORS
Transfert(&Buf,pJob[z]:pStatus,2047);sListedesfichier += Buf+";"

// je n'est pas de valeur pour ces deux fonctions, mais pas d'erreur car
elles sont null.

SI pJob[z]:StartTime<>0 ALORS
Transfert(&Buf,pJob[z]:StartTime,2047);sListedesfichier += Buf+";" SI
pJob[z]:UntilTime<>0 ALORS
Transfert(&Buf,pJob[z]:UntilTime,2047);sListedesfichier += Buf+";"

mais pour ceux-ci :
J'ai une erreur du type :
Vous avez appelé la fonction Transfert.
L'adresse source fournie (0x00000007 sur 2047 octets) est invalide. Elle ne
représente pas une adresse mémoire valide en lecture.

SI pJob[z]:TotalPages<>0 ALORS
Transfert(&Buf,pJob[z]:TotalPages,2047);sListedesfichier += Buf+";" SI
pJob[z]:PagesPrinted<>0 ALORS
Transfert(&Buf,pJob[z]:PagesPrinted,2047);sListedesfichier += Buf+";"


Ci dessous mes structures :

//STRUCTURE UTILISER :
DEVMODEA est une structure
dmDeviceName est une chaîne fixe sur 32 //Type C : BYTE
dmSpecVersion est un entier sur 2 octets //Type C : WORD
dmDriverVersion est un entier sur 2 octets //Type C : WORD
dmSize est un entier sur 2 octets //Type C : WORD
dmDriverExtra est un entier sur 2 octets //Type C : WORD
dmFields est un entier sur 4 octets sans signe //Type C : DWORD
dmOrientation est un entier sur 2 octets //Type C : short
dmPaperSize est un entier sur 2 octets //Type C : short
dmPaperLength est un entier sur 2 octets //Type C : short
dmPaperWidth est un entier sur 2 octets //Type C : short
dmScale est un entier sur 2 octets //Type C : short
dmCopies est un entier sur 2 octets //Type C : short
dmDefaultSource est un entier sur 2 octets //Type C : short
dmPrintQuality est un entier sur 2 octets //Type C : short
dmColor est un entier sur 2 octets //Type C : short
dmDuplex est un entier sur 2 octets //Type C : short
dmYResolution est un entier sur 2 octets //Type C : short
dmTTOption est un entier sur 2 octets //Type C : short
dmCollate est un entier sur 2 octets //Type C : short
dmFormName est une chaîne fixe sur 32 //Type C : BYTE
dmLogPixels est un entier sur 2 octets //Type C : WORD
dmBitsPerPel est un entier sur 4 octets sans signe //Type C : DWORD
dmPelsWidth est un entier sur 4 octets sans signe //Type C : DWORD
dmPelsHeight est un entier sur 4 octets sans signe //Type C : DWORD
dmDisplayFlags est un entier sur 4 octets sans signe //Type C : DWORD
dmDisplayFrequency est un entier sur 4 octets sans signe //Type C : DWORD
dmICMMethod est un entier sur 4 octets sans signe //Type C : DWORD
dmICMIntent est un entier sur 4 octets sans signe //Type C : DWORD
dmMediaType est un entier sur 4 octets sans signe //Type C : DWORD
dmDitherType est un entier sur 4 octets sans signe //Type C : DWORD
dmICCManufacturer est un entier sur 4 octets sans signe //Type C : DWORD
dmICCModel est un entier sur 4 octets sans signe //Type C : DWORD
dmPanningWidth est un entier sur 4 octets sans signe //Type C : DWORD
dmPanningHeight est un entier sur 4 octets sans signe //Type C : DWORD
FIN
PRINTER_DEFAULTSA est une structure
pDatatype est un entier //Type C : LPSTR
pDevMode est un entier //LPDEVMODEA Pointeur sur DEVMODEA
DesiredAccess est un entier //Type ACCESS_MASK non retrouvé (entier est le
type le plus fréquent, mais à VERIFIER) FIN
//********************** Fin de la déclaration des structures pour
<OpenPrinterA>

//********************** Debut de declaration de la structure pour la
fonction EnumJob SYSTEMTIME est une structure
wYear est un entier sur 2 octets //Type C : WORD
wMonth est un entier sur 2 octets //Type C : WORD
wDayOfWeek est un entier sur 2 octets //Type C : WORD
wDay est un entier sur 2 octets //Type C : WORD
wHour est un entier sur 2 octets //Type C : WORD
wMinute est un entier sur 2 octets //Type C : WORD
wSecond est un entier sur 2 octets //Type C : WORD
wMilliseconds est un entier sur 2 octets //Type C : WORD
FIN
JOB_INFO_2A est une structure
JobId est un entier sur 4 octets sans signe //Type C : DWORD
pPrinterName est un entier //Type C : LPSTR
pMachineName est un entier //Type C : LPSTR
pUserName est un entier //Type C : LPSTR
pDocument est un entier //Type C : LPSTR
pNotifyName est un entier //Type C : LPSTR
pDatatype est un entier //Type C : LPSTR
pPrintProcessor est un entier //Type C : LPSTR
pParameters est un entier //Type C : LPSTR
pDriverName est un entier //Type C : LPSTR
pDevMode est un entier //LPDEVMODEA Pointeur sur DEVMODEA
pStatus est un entier //Type C : LPSTR
pSecurityDescriptor est un entier //Type PSECURITY_DESCRIPTOR non retrouvé
(entier est le type le plus fréquent, mais à VERIFIER) Status est un entier
sur 4 octets sans signe //Type C : DWORD Priority est un entier sur 4 octets
sans signe //Type C : DWORD Positions est un entier sur 4 octets sans signe
//Type C : DWORD StartTime est un entier sur 4 octets sans signe //Type C :
DWORD UntilTime est un entier sur 4 octets sans signe //Type C : DWORD
TotalPages est un entier sur 4 octets sans signe //Type C : DWORD
Size est un entier sur 4 octets sans signe //Type C : DWORD
Submitted est un SYSTEMTIME //SYSTEMTIME est une autre structure
Time est un entier sur 4 octets sans signe //Type C : DWORD
PagesPrinted est un entier sur 4 octets sans signe //Type C : DWORD
FIN



CODE UTILISER POUR ENUMERER LES JOBS D'UN SPOOL

PROCEDURE Enumjob(Nomimprimante)
// TEST

nRetourFonction est un entier=0 //
//Paramètre de la fonction API OpenPrinterA
pPrinterName est une chaîne ASCIIZ sur 512 = Nomimprimante // (IN)*** nom de
l'imprmante à ouvrir hdPrint est un entier // (OUT)*** Pointeur sur une
variable qui recoit le handle de l'imprimante ouverte pDefault est un entier
= Null // (IN)*** Pointeur sur structure LPPRINTER_DEFAULTSA

nRetourFonction=API("WINSPOOL.DRV","OpenPrinterA",&pPrinterName,&hdPrint,&pDefault)

//Paramètre de la fonction API EnumJobA
hPrinter est un entier // (IN)*** handle de l'imprimante à ouvrir
FirstJob est un entier // (IN)*** =0 specifie que l'énumération des jobs
commencent au premier job NoJobs est un entier // (IN)*** spécifie le nombre
de job à enumérer Level est un entier // (IN)*** specifie le type
d'information retourner dans le buffer pjob.
(1=JOB_INFO_1,2=JOB_INFO_2,3=JOB_INFO_3) pJob est un tableau dynamique de
14000 JOB_INFO_2A // (OUT)*** Pointeur d'un buffer qui recoit un tableau
d'une structure JOB_INFO_2 cbBuf est un entier // (IN)*** Specifie la taille
en bytes du buffer pJob pcbNeeded est un entier // (OUT)*** Pointer d'une
variable qui recoit le nombre de bytes copié si la fonction est OK
// Si la fonction est FAUX alors la variable recoit le
nombre de bytes requis pcReturned est un entier // (OUT)*** Pointeur d'une
variable qui recoit le nombre de structure (JOB_INFO_2) retourner dans le
buffer pJob

//declaration pour l'extraction du tableau dynamique pJob
z est un entier = 1 //compteur
Buf est une chaîne ASCIIZ sur 2048 = "" // (OUT) pointeur sur une variable
contenant le bloc de destination sListedesfichier est une chaîne //info du
spool de l'imprimante



//Si l'immprimante à bien été ouverte
SI nRetourFonction > 0 ALORS
//Lance une fois pour obtenir le nombre d'octet dont on a besoin : pcbNeeded
hPrinter=hdprint //attribution du handle creé par OpenPrint
FirstJob=0
NoJobs00
Level=2
cbBuf=1
nRetourFonction=API("WINSPOOL.DRV","EnumJobsA",hPrinter,FirstJob,NoJobs,Level,&pJob,cbBuf,&pcbNeeded,&pcReturned)
//LAnce une seconde fois pour obtenir le nombre de job dans la file
d'attente : pcReturned
nRetourFonction=API("WINSPOOL.DRV","EnumJobsA",hPrinter,FirstJob,NoJobs,Level,&pJob,pcbNeeded,&pcbNeeded,&pcReturned)

nnbdoc est un entier
nnbdoc=pcReturned //Attribution du nombre de Job à la variable nnbdoc

//Si la fonction à fonctionné
SI nRetourFonction > 0 ALORS
SI nnbdoc > 0 ALORS
POUR z=1 A nnbdoc
SI z=1 ALORS
sListedesfichier="PagesPrinted;pDocument;pDriverName;pMachineName;pNotifyName;pParameters;pPrinterName;pStatus;pUserName;Size;StartTime;UntilTime;Time;TotalPages"
SINON
sListedesfichier += CRLF
FIN
SI pJob[z]:pPrinterName<>0 ALORS
Transfert(&Buf,pJob[z]:pPrinterName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pUserName<>0 ALORS
Transfert(&Buf,pJob[z]:pUserName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pDocument<>0 ALORS
Transfert(&Buf,pJob[z]:pDocument,2047);sListedesfichier += Buf+";" SI
pJob[z]:pNotifyName<>0 ALORS
Transfert(&Buf,pJob[z]:pNotifyName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pParameters<>0 ALORS
Transfert(&Buf,pJob[z]:pParameters,2047);sListedesfichier += Buf+";" SI
pJob[z]:pDriverName<>0 ALORS
Transfert(&Buf,pJob[z]:pDriverName,2047);sListedesfichier += Buf+";" SI
pJob[z]:pStatus<>0 ALORS
Transfert(&Buf,pJob[z]:pStatus,2047);sListedesfichier += Buf+";" SI
pJob[z]:StartTime<>0 ALORS
Transfert(&Buf,pJob[z]:StartTime,2047);sListedesfichier += Buf+";" SI
pJob[z]:UntilTime<>0 ALORS
Transfert(&Buf,pJob[z]:UntilTime,2047);sListedesfichier += Buf+";" SI
pJob[z]:TotalPages<>0 ALORS
Transfert(&Buf,pJob[z]:TotalPages,2047);sListedesfichier += Buf+";" SI
pJob[z]:Size<>0 ALORS Transfert(&Buf,pJob[z]:Size,2047);sListedesfichier +=
Buf+";" SI pJob[z]:Time<>0 ALORS
Transfert(&Buf,pJob[z]:Time,2047);sListedesfichier += Buf+";" SI
pJob[z]:PagesPrinted<>0 ALORS
Transfert(&Buf,pJob[z]:PagesPrinted,2047);sListedesfichier += Buf+";"

FIN
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
SINON
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
Info("echec1 nbdoc pas supérieur à zero")
FIN
SINON
//Fermeture de la connexion à l'imprimante
API("WINSPOOL.DRV","ClosePrinter",hPrinter)
Info("echec2 la fonction API n'a pas fonctionné")
FIN
SINON
Info("Impossible d'ouvrir l'imprimante")
FIN

Je ne comprend pourquoi avec les variables déclarées en temps que DWORD ma
fonction transfert retourne le code d'erreur ci-dessus?

Merci d'avance

Romano


regardez ici :
http://windevapi.free.fr/forum1.php…
vous y trouverez peut être votre bonheur

--
Cordialement JeAn-PhI
Posted on April, 09 2006 - 11:25 PM
Salut

je n'ai pas WD sous la main mais rapidement il est certain que la fonction
transfert ne fonctionne pas avec les DWORD parce que la valeur n'est pas une
adresse. En théorie il vous serait donc possible d'y accéder directement.

info("Nombre de pages total:"+pJob[z]:TotalPages)

L'erreur: L'adresse source fournie (0x00000007... me laisse donc croire que
7 serait le nombre de pages total.

Il vous serait toujours possible de faire un transfert de la manière
suivante:
Transfert(&Buf,&pJob[z]:TotalPages,4)
Transfert(&Buf,&pJob[z]:PagesPrinted,4)
Mais je ne vois pas l'utilité

Mathieu
Posted on April, 10 2006 - 1:12 PM
Cela fonctionne c'était bien le nombre de page 7 qui se trouvais dans l'adresse mémoire.

Merci

Romano
Posted on April, 10 2006 - 4:19 PM
A la place de l'adresse ip de ton serveur met l'alias.
en espérant t'aider
a+