c#餐饮系统打印机_C# 小票打印机 直接打印 无需驱动[转]

class LPTControl

{

#region API函数

[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,

out int lpNumberOfBytesWritten, out OVERLAPPED lpOverlapped);

[DllImport("kernel32.dll")]

private static extern bool CloseHandle(int hObject);

#endregion

public enum HorPos { Left, Center, Right }

private int iHandle;

private int ColWidth = 32;

public bool Open()

{

iHandle = CreateFile("LPT1", 0x40000000, 0, 0, 3, 0, 0);

if (iHandle != -1)

{

return true;

}

else

{

return false;

}

}

public bool Write(string Data)

{

try

{

if (iHandle != -1)

{

int i;

OVERLAPPED x;

byte[] bData = System.Text.Encoding.Default.GetBytes(Data);

return WriteFile(iHandle, bData, bData.Length, out i, out x);

}

else

{

return false;

}

}

catch { return false; }

}

public bool Write(byte[] bdata)

{

if (bdata.Length == 0) return false;

if (iHandle != -1)

{

int i;

OVERLAPPED x;

return WriteFile(iHandle, bdata, bdata.Length, out i, out x);

}

else

{

return false;

}

}

public bool WriteLine(string Data)

{

bool Result = Write(Data);

if (Result) Result = NewRow();

return Result;

}

public bool WriteLine(string Data, HorPos horpos)

{

int Length = Encoding.Default.GetBytes(Data).Length;

if (Length > ColWidth || HorPos.Left == horpos) return WriteLine(Data);

switch (horpos)

{

case HorPos.Center:

Data = Data.PadLeft(Length + (ColWidth - Length) / 2 - (Length - Data.Length), ' ');

break;

case HorPos.Right:

Data = Data.PadLeft(ColWidth - (Length - Data.Length), ' ');

break;

default:

break;

}

return WriteLine(Data);

}

public bool Close()

{

return CloseHandle(iHandle);

}

public bool PrintLine()

{

return WriteLine("================================");

}

public bool PrintDate()

{

return WriteLine("打印时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

}

public bool NewRow()

{

bool Result = Write(new byte[] { 27, 10, 13 });

return Result;

}

public bool NewRow(int iRow)

{

bool Result = false;

for (int i = 0; i < iRow; i++)

{

Result = NewRow();

if (!Result) break;

}

return Result;

}

public bool CutPaper()

{

NewRow(5);

return Write(new byte[] { 27, 105 });

}

}

public class Printer

{

#region 预定义类型

[FlagsAttribute]

public enum PrinterEnumFlags

{

PRINTER_ENUM_DEFAULT = 0x00000001,

PRINTER_ENUM_LOCAL = 0x00000002,

PRINTER_ENUM_CONNECTIONS = 0x00000004,

PRINTER_ENUM_FAVORITE = 0x00000004,

PRINTER_ENUM_NAME = 0x00000008,

PRINTER_ENUM_REMOTE = 0x00000010,

PRINTER_ENUM_SHARED = 0x00000020,

PRINTER_ENUM_NETWORK = 0x00000040,

PRINTER_ENUM_EXPAND = 0x00004000,

PRINTER_ENUM_CONTAINER = 0x00008000,

PRINTER_ENUM_ICONMASK = 0x00ff0000,

PRINTER_ENUM_ICON1 = 0x00010000,

PRINTER_ENUM_ICON2 = 0x00020000,

PRINTER_ENUM_ICON3 = 0x00040000,

PRINTER_ENUM_ICON4 = 0x00080000,

PRINTER_ENUM_ICON5 = 0x00100000,

PRINTER_ENUM_ICON6 = 0x00200000,

PRINTER_ENUM_ICON7 = 0x00400000,

PRINTER_ENUM_ICON8 = 0x00800000,

PRINTER_ENUM_HIDE = 0x01000000

}

[StructLayout(LayoutKind.Sequential)]

public struct PRINTER_INFO_2

{

[MarshalAs(UnmanagedType.LPTStr)]

public string pServerName;

[MarshalAs(UnmanagedType.LPTStr)]

public string pPrinterName;

[MarshalAs(UnmanagedType.LPTStr)]

public string pShareName;

[MarshalAs(UnmanagedType.LPTStr)]

public string pPortName;

[MarshalAs(UnmanagedType.LPTStr)]

public string pDriverName;

[MarshalAs(UnmanagedType.LPTStr)]

public string pComment;

[MarshalAs(UnmanagedType.LPTStr)]

public string pLocation;

public IntPtr pDevMode;

[MarshalAs(UnmanagedType.LPTStr)]

public string pSepFile;

[MarshalAs(UnmanagedType.LPTStr)]

public string pPrintProcessor;

[MarshalAs(UnmanagedType.LPTStr)]

public string pDatatype;

[MarshalAs(UnmanagedType.LPTStr)]

public string pParameters;

public IntPtr pSecurityDescriptor;

public uint Attributes;

public uint Priority;

public uint DefaultPriority;

public uint StartTime;

public uint UntilTime;

public uint Status;

public uint cJobs;

public uint AveragePPM;

}

#endregion

#region 引用 WindowsAPI

//引用API声明

[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]

[return: MarshalAs(UnmanagedType.Bool)]

private static extern bool EnumPrinters(PrinterEnumFlags Flags, string Name, uint Level,

IntPtr pPrinterEnum, uint cbBuf, ref uint pcbNeeded,

ref uint pcReturned);

#endregion

public static string[] GetPrinter()

{

string[] Result = null;

PRINTER_INFO_2[] printInfo;

printInfo = EnumPrinters(PrinterEnumFlags.PRINTER_ENUM_LOCAL);

if (printInfo != null && printInfo.Length >= 0)

{

Result = new string[printInfo.Length];

for (int i = 0; i < printInfo.Length; i++)

{

Result[i] = printInfo[i].pPrinterName;

}

}

return Result;

}

#region 托管代码

///

/// 遍历打印机

///

///

///

public static PRINTER_INFO_2[] EnumPrinters(PrinterEnumFlags Flags)

{

PRINTER_INFO_2[] Info2 = null;

uint cbNeeded = 0;

uint cReturned = 0;

bool ret = EnumPrinters(Flags, null, 2, IntPtr.Zero, 0, ref cbNeeded, ref cReturned);

IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);

ret = EnumPrinters(Flags, null, 2, pAddr, cbNeeded, ref cbNeeded, ref cReturned);

if(ret)

{

Info2 = new PRINTER_INFO_2[cReturned];

int offset = pAddr.ToInt32();

for (int i = 0; i < cReturned; i++)

{

Info2[i] = (PRINTER_INFO_2)Marshal.PtrToStructure(new IntPtr(offset), typeof(PRINTER_INFO_2));

offset += Marshal.SizeOf(typeof(PRINTER_INFO_2));

}

Marshal.FreeHGlobal(pAddr);

}

return Info2;

}

#endregion

}

调用代码:

//不用驱动的话,不判断是否存在打印机。

if (Printer.GetPrinter() == null || Printer.GetPrinter().Length == 0)

{

State = "没有找到合适的打印机...";

return;

}

State = "正在打印...";

try

{

LPTControl lpt = new LPTControl();

lpt.Open();

lpt.WriteLine("数据头标题", LPTControl.HorPos.Center);

lpt.WriteLine("数据副标题", LPTControl.HorPos.Center);

lpt.PrintLine();

string StrTitle = " 列名1 ";

StrTitle += "       列名2    ";

lpt.WriteLine(StrTitle);

for (int i = 0; i < DSCount.Tables[0].Rows.Count; i++)

{

lpt.WriteLine(DSCount.Tables[0].Rows[i][0].ToString()

+ DSCount.Tables[0].Rows[i][1].ToString().PadLeft(11, ' '));

}

lpt.NewRow();

lpt.WriteLine("合计:".PadRight(8, ' ') + LabCount.Text.PadLeft(11, ' '));

lpt.PrintLine();

lpt.PrintDate();

lpt.CutPaper();

lpt.Close();

System.Threading.Thread.Sleep(500);

State = "打印完成...";

}

catch (Exception Ex)

{

State = "打印出错...";

WriteLog("打印出错:" + Ex.Message);

}

如果没有安装打印机驱动程序,调用的时候,一定要保证打印机联机。

适用于56-58mm的纸

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值