Bonjour,
Voici la solution pour ceux qui ont a besoin.
1- Créer une classe nommée "LPrinter" contenant ce code:
Imports System
Imports System.Drawing.Printing
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Namespace LPrinterTest
Class LPrinter
<StructLayout(LayoutKind.Sequential, CharSet := CharSet.Ansi)> _
Public Class DOCINFOA
<MarshalAs(UnmanagedType.LPStr)> _
Public pDocName As String
<MarshalAs(UnmanagedType.LPStr)> _
Public pOutputFile As String
<MarshalAs(UnmanagedType.LPStr)> _
Public pDataType As String
End Class
<DllImport("winspool.Drv", EntryPoint := "OpenPrinterA", SetLastError := True, CharSet := CharSet.Ansi, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function OpenPrinter(<MarshalAs(UnmanagedType.LPStr)> szPrinter As String, ByRef hPrinter As IntPtr, pd As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "ClosePrinter", SetLastError := True, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function ClosePrinter(hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "StartDocPrinterA", SetLastError := True, CharSet := CharSet.Ansi, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function StartDocPrinter(hPrinter As IntPtr, level As Int32, <[In], MarshalAs(UnmanagedType.LPStruct)> di As DOCINFOA) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "EndDocPrinter", SetLastError := True, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function EndDocPrinter(hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "StartPagePrinter", SetLastError := True, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function StartPagePrinter(hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "EndPagePrinter", SetLastError := True, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function EndPagePrinter(hPrinter As IntPtr) As Boolean
End Function
<DllImport("winspool.Drv", EntryPoint := "WritePrinter", SetLastError := True, ExactSpelling := True, CallingConvention := CallingConvention.StdCall)> _
Public Shared Function WritePrinter(hPrinter As IntPtr, pBytes As IntPtr, dwCount As Int32, ByRef dwWritten As Int32) As Boolean
End Function
Private HandlePrinter As IntPtr
Private ps As PrinterSettings
Public Sub New()
HandlePrinter = IntPtr.Zero
ps = New PrinterSettings()
End Sub
Public Property PrinterName() As String
Get
Return ps.PrinterName
End Get
Set
ps.PrinterName = value
End Set
End Property
Public Function ChoosePrinter() As Boolean
Dim pd As New PrintDialog()
pd.PrinterSettings = ps
If pd.ShowDialog() = DialogResult.OK Then
ps = pd.PrinterSettings
Return True
Else
Return False
End If
End Function
Public Function Open(DocName As String) As Boolean
If HandlePrinter <> IntPtr.Zero Then
Return False
End If
Dim risp As Boolean = OpenPrinter(ps.PrinterName, HandlePrinter, IntPtr.Zero)
If risp = False Then
Return False
End If
Dim MyDocInfo As New DOCINFOA()
MyDocInfo.pDocName = DocName
MyDocInfo.pOutputFile = Nothing
MyDocInfo.pDataType = "RAW"
If StartDocPrinter(HandlePrinter, 1, MyDocInfo) Then
StartPagePrinter(HandlePrinter)
Return True
Else
Return False
End If
End Function
Public Function Close() As Boolean
If HandlePrinter = IntPtr.Zero Then
Return False
End If
If Not EndPagePrinter(HandlePrinter) Then
Return False
End If
If Not EndDocPrinter(HandlePrinter) Then
Return False
End If
If Not ClosePrinter(HandlePrinter) Then
Return False
End If
HandlePrinter = IntPtr.Zero
Return True
End Function
Public Function Print(outputstring As String) As Boolean
If HandlePrinter = IntPtr.Zero Then
Return False
End If
Dim buf As IntPtr = Marshal.StringToCoTaskMemAnsi(outputstring)
Dim done As Int32 = 0
Dim ok As Boolean = WritePrinter(HandlePrinter, buf, outputstring.Length, done)
Marshal.FreeCoTaskMem(buf)
If Not ok Then
Return False
Else
Return True
End If
End Function
End Class
End Namespace
2- faire appel à la fonction print pour imprimer.
C'est assez simple