OVH Cloud OVH Cloud

Impression sur COM: le retour...

7 réponses
Avatar
Benoit
Bonjour,

J'ai en gros le même problème que Simsim avec son imprimante thermique.

Rappel:
[...]
J'imprime via mscom sur un port série. Le problème c que j'ai un drivers
installé sur ce port. Je voucrait imprimer via un mscom.outpout mais quand
j'ouvre le port via mscom.PortOpen j'ai une erreur du a l'installation de se
drivers.
[...]

Pour ma part je souhaite envoyer des chaines de caractères à l'imprimante et
réceptionner les retours de celle-ci.
J'arrive à lui envoyer les commandes sans aucun problème via l'API
WritePrinter.
En revanche, il m'est impossible de lire les retours via ReadPrinter.

Une idée ?

Benoit

7 réponses

Avatar
François Picalausa
Hello,

Peux-tu préciser " il m'est impossible de lire les retours via ReadPrinter."
?
Ca plante VB? avec une GPF? Ca retourne une valeur différente de zéro?
autre?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Benoit" a écrit dans le message de
news:
il m'est impossible de lire les retours via ReadPrinter.


Avatar
ng
Salut,

Peut-on voir ton code ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Benoit a écrit :

Oui l'API ReadPrinter me retourne 0 donc, elle a échouée.
Selon l'API GetLastDllError, se serait du à un mauvais Handle, mais
c'est le même que celui sur lesquelles je fais toutes les opérations,
et celui-ci fonctionne.
...
bizarre

benoit

Hello,

Peux-tu préciser " il m'est impossible de lire les retours via
ReadPrinter." ?
Ca plante VB? avec une GPF? Ca retourne une valeur différente de
zéro? autre?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Benoit" a écrit dans le message de
news:
il m'est impossible de lire les retours via ReadPrinter.






Avatar
Benoit
Oui l'API ReadPrinter me retourne 0 donc, elle a échouée.
Selon l'API GetLastDllError, se serait du à un mauvais Handle, mais c'est le
même que celui sur lesquelles je fais toutes les opérations, et celui-ci
fonctionne.
...
bizarre

benoit

Hello,

Peux-tu préciser " il m'est impossible de lire les retours via


ReadPrinter."
?
Ca plante VB? avec une GPF? Ca retourne une valeur différente de zéro?
autre?

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Benoit" a écrit dans le message de
news:
>il m'est impossible de lire les retours via ReadPrinter.




Avatar
François Picalausa
Hello,

Question bête, l'imprimante est bien bidirectionnelle?
Ton code me semble correct!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Benoit" a écrit dans le message de
news:%
Avatar
Benoit
Le voici:

--------------------------------------------------

Private Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type

Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As
Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter
As Long) As Long
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA"
(ByVal pPrinterName As String, _
phPrinter As Long, ByVal pDefault As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" Alias
"StartDocPrinterA" (ByVal hPrinter As Long, _
ByVal Level As Long, pDocInfo As DOCINFO) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter
As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As
Long, pBuf As Any, ByVal cdBuf As Long, _
pcWritten As Long) As Long
Private Declare Function ReadPrinter Lib "winspool.drv" (ByVal hPrinter As
Long, pBuf() As Byte, ByVal cdBuf As Long, _ pNoBytesRead As Long) As
Long



Private Sub cmdEnvoyer_Click()

Dim lhPrinter As Long
Dim lReturn As Long
Dim lpcWritten As Long
Dim lDoc As Long
Dim sWrittenData As String
Dim MyDocInfo As DOCINFO

If OpenPrinter(Printer.DeviceName, lhPrinter, 0) = 0 Then
MsgBox "The Printer Name you typed wasn't recognized."
Exit Sub
End If

MyDocInfo.pDocName = "Test"
MyDocInfo.pOutputFile = vbNullString
MyDocInfo.pDatatype = vbNullString

lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
Call StartPagePrinter(lhPrinter)

sWrittenData = <$TEST>

'ici, on envoie <TEST> à l'imprimante. Ceci fonctionne très bien.
lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, Len(sWrittenData),
lpcWritten)


Dim byTab(500) As Byte
Dim lNbReadData As Long

'ici, on essai de récupérer le retour de l'imprimante. Mais là, ça ne
marche pas.
If ReadPrinter(lhPrinter, byTab, 500, lNbReadData) = 0 Then _
MsgBox "ReadPrinter fails: " & ApiErrorText(Err.LastDllError)

lReturn = EndPagePrinter(lhPrinter)
lReturn = EndDocPrinter(lhPrinter)
lReturn = ClosePrinter(lhPrinter)


End Sub
--------------------------------------------------

Benoit

Salut,

Peut-on voir ton code ?

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Benoit a écrit :

> Oui l'API ReadPrinter me retourne 0 donc, elle a échouée.
> Selon l'API GetLastDllError, se serait du à un mauvais Handle, mais
> c'est le même que celui sur lesquelles je fais toutes les opérations,
> et celui-ci fonctionne.
> ...
> bizarre
>
> benoit
>
>> Hello,
>>
>> Peux-tu préciser " il m'est impossible de lire les retours via
>> ReadPrinter." ?
>> Ca plante VB? avec une GPF? Ca retourne une valeur différente de
>> zéro? autre?
>>
>> --
>> François Picalausa (MVP VB)
>> http://faq.vb.free.fr --- http://msdn.microsoft.com
>> http://apisvb.europe.webmatrixhosting.net
>>
>> "Benoit" a écrit dans le message de
>> news:
>>> il m'est impossible de lire les retours via ReadPrinter.




Avatar
Benoit
> Hello,

Question bête, l'imprimante est bien bidirectionnelle?
Ton code me semble correct!



Mon imprimante oui.
Le driver certainemant, mais je n'en suis pas sur à 100%.
En effet, la case bidirectionelle est grisée. Sa veut dire quoi ?

Benoit
Avatar
François Picalausa
Hello!

En effet, la case bidirectionelle est grisée. Sa veut dire quoi ?


Ca signifie que Windows lorsqu'il demande au driver si l'imprimante est bidi
et que le driver dit non...
Donc l'imprimante ne l'est pas.
Vérifie que le driver installé n'est pas un driver générique quelconque mais
bien le vrai et l'authentique driver de l'imprimante ;-)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Benoit" a écrit dans le message de
news:
Hello,

Question bête, l'imprimante est bien bidirectionnelle?
Ton code me semble correct!



Mon imprimante oui.
Le driver certainemant, mais je n'en suis pas sur à 100%.




Benoit