PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → imprimante prêt non prêt / printer ready not ready
imprimante prêt non prêt / printer ready not ready
Iniciado por Alexis, jan., 27 2020 1:02 PM - 4 respostas
Membro registado
87 mensagems
Publicado em janeiro, 27 2020 - 1:02 PM
Dans l'aperçu avant impression, juste en dessous du nom de l'imprimante, on voit l'état de l'imprimante prêt / non prêt.

Comment accéder à cette information par programmation ?

J'ai cherché dans iParamètre() sans succcès.
Membro registado
3.883 mensagems
Popularité : +227 (347 votes)
Publicado em janeiro, 27 2020 - 1:45 PM
Bonjour,
Voici le lien vers une collection de procédures de gestion d'imprimantes, entre autre IsPrinterReady https://depot.pcsoft.fr/resource.awp…

Pour info, c'est un appel à la fonction GetPrinterA de l'API winspool_drv

--
Il y a peut être plus simple, mais, ça tourne
Mensagem modificada, janeiro, 27 2020 - 1:47 PM
Membro registado
87 mensagems
Publicado em janeiro, 27 2020 - 6:02 PM
Merci, mais ce code WinDEV 12 est trop vieux, ne compile pas, est seulement 32 bits, est peu commenté et ne marche pas.
Membro registado
946 mensagems
Popularité : +102 (110 votes)
Publicado em fevereiro, 02 2020 - 6:29 PM
Bonjour,
" mais ce code WinDEV 12 est trop vieux, ne compile pas" faux je viens de le ré-téléchargeret de le compiler en v20
"est seulement 32 bits" faux il est compatible 64 bits
"est peu commenté" qu'auriez vous avoir de + j'ai mis quasiment tout les liens vers les pages d'aide Microsoft plus mes propres commentaires
exemple
// Ouverture du handle avec l'imprimante
// see : http://msdn2.microsoft.com/en-us/library/ms536027.aspx
RetAPI = API( winspool_drv, "OpenPrinterA" , &sPrinterName, &hdPrint, Null)
IF RetAPI = 0 THEN RENVOYER ""

// Exécution de la fonction une fois avec 0 pour connaître le nombre exact
cbBuf = 0
pcbNeeded = 0
// see : http://msdn2.microsoft.com/en-us/library/ms535494.aspx
RetAPI = API( winspool_drv, "GetPrinterA", hdPrint, PRINTER_INFO_LEVEL, &tPRINTER, cbBuf, &pcbNeeded)
cbBuf = pcbNeeded

// On redimensionne tPrinter de façon a avoir assez de place
// le premier tPRINTER[1] est utilisé pour stocker les adresses
// des chaines qui sont stockées après mais dans la même zone
// pcbNeeded : Nombre d'octet pour la structure et les data
// dimension(basePRINTER) : Nombre d'octet pour la structure
// donc pour être sur on prend PartieEntière(pcbNeeded/dimension(basePRINTER))+1
Dimension(tPRINTER, PartieEntière(pcbNeeded/Dimension(basePRINTER))+1)

// et on relance
// see : http://msdn2.microsoft.com/en-us/library/ms535494.aspx
RetAPI = API( winspool_drv, "GetPrinterA", hdPrint, PRINTER_INFO_LEVEL, &tPRINTER, cbBuf, &pcbNeeded)
IF RetAPI = 0 THEN
// see : http://msdn2.microsoft.com/en-us/library/ms535648.aspx
API(winspool_drv,"ClosePrinter", hdPrint)
RENVOYER ""
END

// Fermeture
// see : http://msdn2.microsoft.com/en-us/library/ms535648.aspx
API(winspool_drv,"ClosePrinter", hdPrint)

// Ici on peut exploiter
ServeurName est une chaîne = ChaîneRécupère( tPRINTER[1]:pServerName, crAdresseASCIIZ)
PrinterName est une chaîne = ChaîneRécupère( tPRINTER[1]:pPrinterName, crAdresseASCIIZ)
ShareName est une chaîne = ChaîneRécupère( tPRINTER[1]:pShareName, crAdresseASCIIZ)
PortName est une chaîne = ChaîneRécupère( tPRINTER[1]:pPortName, crAdresseASCIIZ)
DriverName est une chaîne = ChaîneRécupère( tPRINTER[1]:pDriverName, crAdresseASCIIZ)


" et ne marche pas." il fonctionne très bien chez moi

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Membro registado
3.883 mensagems
Popularité : +227 (347 votes)
Publicado em fevereiro, 02 2020 - 11:33 PM
Philippe Pasquali a écrit :
" et ne marche pas." il fonctionne très bien chez moi

Chez moi aussi, compilé en 32 ou 64.
Très bon boulot en passant

--
Il y a peut être plus simple, mais, ça tourne