转载:C#Lpt端口打印类的操作浅析 - 如.若 - 博客园 (cnblogs.com)
C#LPT端口打印类的操作是什么呢?首先让我们看看什么是LPT端口(打印机专用)?LPT端口是一种增强了的双向并行传输接口,在USB接口出现以前是扫描仪,打印机最常用的接口。最高传输速度为1.5Mbps,设备容易安装及使用,但是速度比较慢,下面是C#LPT端口打印类的操作具体实例:
/// <summary> /// LPTControl 的摘要说明,C#LPT端口打印类的操作 /// </summary> public class LPTControls { public LPTControls() { } [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int Offset; int OffSetHigh; int hEvent; } [DllImport("kernel32.dll")] private static extern int CreateFile( string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile ); [DllImport("kernel32.dll")] private static extern bool WriteFile( int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref OVERLAPPED lpOverlapped ); [DllImport("kernel32.dll")] private static extern bool CloseHandle( int hObject ); //C#LPT端口打印类的操作 private int iHandle; public bool Open() { iHandle = CreateFile("lpt1", 0x40000000, 0, 0, 3, 0, 0); if (iHandle != -1) { return true; } else { return false; } } public bool Write(String Mystring) { if (iHandle != -1) { int i = 0; OVERLAPPED x = new OVERLAPPED(); byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring); return WriteFile( iHandle, mybyte, mybyte.Length, ref i, ref x); } else { throw new Exception("端口未打开!"); } } public bool Close() { return CloseHandle(iHandle); } }