class LptControl
{
private string LptStr = "lpt1";
public LptControl(string l_LPT_Str)
{
LptStr = l_LPT_Str;
}
[StructLayout(LayoutKind.Sequential)]
private struct OVERLAPPED
{
int Internal;
int InternalHigh;
int Offset;
int OffSetHigh;
int hEvent;
}
//调用DLL.
[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);
private int iHandle;
///
/// 打开端口
///
///
public bool Open()
{
iHandle = CreateFile(LptStr, 0x40000000, 0, 0, 3, 0, 0);
// iHandle = CreateFile(LptStr, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (iHandle != -1)
{
return true;
}
else
{
return false;
}
}
///
/// 打印字符串,通过调用该方法可以打印需要的字符串
///
///
///
public bool Write(String Mystring)
{
//如果端口为打开,则提示,打开,则打印
if (iHandle != -1)
{
OVERLAPPED x = new OVERLAPPED();
int i = 0;
//byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
byte[] mybyte = Encoding.GetEncoding("GB2312").GetBytes(Mystring);
bool b = WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
return b;
}
else
{
throw new Exception("不能连接到打印机!");
}
}
///
/// 打印命令,通过参数,可以打印小票打印机的一些命令,比如换行,行间距,打印位图等。
///
///
///
public bool Write(byte[] mybyte)
{
//如果端口为打开,则提示,打开,则打印
if (iHandle != -1)
{
OVERLAPPED x = new OVERLAPPED();
int i = 0;
return WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x);
}
else
{
throw new Exception("不能连接到打印机!");
}
}
///
/// 关闭端口
///
///
public bool Close()
{
return CloseHandle(iHandle);
}
}
Byte[] data1 = new byte[] { 0x1D, 0x56, 0x30 };//切纸指令
Byte[] data2 = new byte[] { 0x1B, 0x70, 0x00, 0x3C, 0xFF };//弹钱箱指令(什么鬼收银机中可以弹钱箱,我也不知道)
Byte[] data3 = new byte[] { 0x1D, 0x21, 0x24, 0x24 };//字体大小36
Byte[] data4 = new byte[] { 0x1D, 0x21, 0x0C, 0x0C };//字体大小12
Byte[] data5 = new byte[] { 0x1B, 0x45, 0x01 };//字体加粗开始
Byte[] data6 = new byte[] { 0x1B, 0x45, 0x00 };//字体加粗结束
LptControl lc = new LptControl("lpt1");//端口
lc.Open();
lc.Write(data3);//打印指令byte数组
lc.Write("文字文字");//打印文字
lc.Write("\n\n\n\n");
lc.Close();