vb.net中输出字符到LPT并口,以打印小票
原来在VB6中:
Open "LPT1: " For Output As #1
Print #1, Chr$(27); "E "; Chr(&H1B); Chr(&H26); "l "; "1 "; "O "
Close #1
在vb2010里面就不能用open来打开LPT1了,要用什么最简的办法呢?
[解决办法]
'Open'Write(str)'CloseImports System.Runtime.InteropServicesPublic Class LPT Inherits MarshalByRefObject#Region "Declare" <DllImport("kernel32.dll")> Private Shared Function CreateFile( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Integer, _ ByVal dwShareMode As Integer, _ ByVal lpSecurityAttributes As Integer, _ ByVal dwCreationDisposition As Integer, _ ByVal dwFlagsAndAttributes As Integer, _ ByVal hTemplateFile As Integer _ ) As Integer End Function <DllImport("kernel32.dll")> Private Shared Function ReadFile( _ ByVal hFile As Integer, _ ByVal Buffer As Byte(), _ ByVal nNumberOfBytesToRead As Integer, _ ByRef lpNumberOfBytesRead As Integer, _ ByRef lpOverlapped As OVERLAPPED _ ) As Integer End Function <DllImport("kernel32.dll")> Private Shared Function WriteFile( _ ByVal hFile As Integer, _ ByVal Buffer As Byte(), _ ByVal nNumberOfBytesToWrite As Integer, _ ByRef lpNumberOfBytesWritten As Integer, _ ByRef lpOverlapped As OVERLAPPED _ ) As Integer End Function <DllImport("kernel32.dll")> Private Shared Function CloseHandle(ByVal hObject As Integer) As Integer End Function <StructLayout(LayoutKind.Sequential)> Private Structure OVERLAPPED Public ternal As Integer Public ternalHigh As Integer Public offset As Integer Public OffsetHigh As Integer Public hEvent As Integer End Structure Private Const OPEN_EXISTING = 3 Private Const GENERIC_READ = &H80000000 Private Const GENERIC_WRITE = &H40000000#End Region#Region "变量" Private m_portname As String = "LPT1" Private m_opened As Boolean = False Private m_handle As Integer = -1#End Region#Region "属性" Public Property Port() As String Get Return m_portname End Get Set(ByVal Value As String) m_portname = Value End Set End Property Public Property IsOpen() As Boolean Get Return m_opened End Get Set(ByVal Value As Boolean) m_opened = Value End Set End Property#End Region#Region "方法" Public Sub Open(ByVal Prt As String) m_handle = CreateFile(Prt, GENERIC_READ + GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0) If m_handle = -1 Then Throw New Exception("打开并口失败!") Return End If m_opened = True End Sub Public Sub Open() Open(m_portname) End Sub Public Sub Write(ByVal data As Byte) Dim written As Integer Dim buffer As Byte() buffer = Array.CreateInstance(GetType(Byte), 1) buffer(0) = data If m_opened Then WriteFile(m_handle, buffer, 1, written, New OVERLAPPED) End If End Sub Public Sub Write(ByVal sData As String) Dim bytes() As Byte = System.Text.Encoding.ASCII.GetBytes(sData) For Each b As Byte In bytes Write(b) Next End Sub Public Function Read() As Byte Dim buffer As Byte() = Nothing Dim rd As Integer = 0 If m_opened = True Then ReadFile(m_handle, buffer, 1, rd, New OVERLAPPED) End If If rd > 0 Then Return buffer(0) Else Return 0 End Function Public Sub Close() If m_handle <> -1 Then CloseHandle(m_handle) m_handle = -1 End If m_opened = False End Sub#End RegionEnd Class