using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
namespace EPSONPOS
{
public class POS
{
/// <summary>
/// 创建文件
/// </summary>
/// <param name="lpFileName">端口名(文件名)</param>
/// <param name="dwDesiredAccess">访问模式(写/读)如果为0,表示只允许获取与一个设备有关的信息</param>
/// <param name="dwShareMode">共享模式(0表示不共享)</param>
/// <param name="lpSecurityAttributes">指向安全属性的指针</param>
/// <param name="dwCreationDisposition">如何创建</param>
/// <param name="dwFlagsAndAttributes">文件属性</param>
/// <param name="hTemplateFile">用于复制文件句柄(如果不为零,则指定一个文件句柄。
/// 新文件将从这个文件中复制扩展属性)</param>
/// <returns></returns>
[DllImport("kernel32.dll ", CharSet = CharSet.Auto)]
private static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(IntPtr hObject);
System.IO.Ports.SerialPort com;
public POS()
{
}
/// <summary>
/// 初始化串口
/// </summary>
/// <param name="commport"></param>
[Description("初始化串口")]
public void InitComm(int commport)
{
try
{
com = new System.IO.Ports.SerialPort();
com.BaudRate = 2400;
com.PortName = "COM" + commport.ToString();
com.DataBits = 8;
com.StopBits = System.IO.Ports.StopBits.One;
if (!com.IsOpen)
{
com.Open();
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 关闭串口
/// </summary>
[Description("关闭串口")]
public void CloseComm()
{
try
{
if (com.IsOpen)
{
com.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 是否打开串口
/// </summary>
/// <returns></returns>
[Description("是否打开串口")]
public bool isOpen()
{
try
{
if (com.IsOpen)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 开钱箱(STAR)
/// </summary>
[Description("开钱箱(STAR)")]
public void OpenBoxForStar()
{
try
{
IntPtr iHandle = CreateFile("LPT1 ", 0x40000000, 0, 0, 3, 0, 0);
if (iHandle.ToInt32() != -1)
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite, true);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
StringBuilder sb = new StringBuilder();
sb.Append((char)0x1B);
sb.Append((char)'p');
sb.Append((char)0x07);//传入命令
sw.Write(sb.ToString());
sw.Close();
fs.Close();
CloseHandle(iHandle);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 开钱箱(EPSON)
/// </summary>
[Description("开钱箱(EPSON)")]
public void OpenBox()
{
try
{
IntPtr iHandle = CreateFile("LPT1 ", 0x40000000, 0, 0, 3, 0, 0);
if (iHandle.ToInt32() != -1)
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite, true);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
StringBuilder sb = new StringBuilder();
sb.Append((char)0x1B);
sb.Append((char)'p');
sb.Append((char)0x00);//传入命令
sb.Append((char)0x3C);//传入命令
sb.Append((char)0xFF);//传入命令
sw.Write(sb.ToString());
sw.Close();
fs.Close();
CloseHandle(iHandle);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 打印
/// </summary>
/// <param name="sb"></param>
[Description("打印")]
public void Print(StringBuilder sb)
{
try
{
if (sb != null)
{
IntPtr iHandle = CreateFile("LPT1 ", 0x40000000, 0, 0, 3, 0, 0);
if (iHandle.ToInt32() != -1)
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite, true);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
//sb.AppendLine(str);
sw.Write(sb.ToString());
sw.Close();
fs.Close();
CloseHandle(iHandle);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 合计金额(总金额)
/// </summary>
/// <param name="needpay"></param>
[Description("合计金额(总金额)")]
public void PosScreenShowNeedPay(decimal needpay)
{
try
{
if (com.IsOpen)
{
StringBuilder sb = new StringBuilder();
sb.Append((char)0x1B);
sb.Append((char)0x51);
sb.Append((char)0x41);
string pay = string.Format("{0:F2}", needpay);
for (int i = 0; i < pay.Length; i++)
{
sb.Append((char)pay[i]);
}
sb.Append((char)0x0D);
com.WriteLine(sb.ToString());
sb.Remove(0, sb.ToString().Length);
sb.Append((char)0x1B);
sb.Append((char)0x73);
sb.Append((char)0x32);
com.WriteLine(sb.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 实收金额(收款金额)
/// </summary>
/// <param name="factpay"></param>
[Description("实收金额(收款金额)")]
public void PosScreenShowFactPay(decimal factpay)
{
try
{
if (com.IsOpen)
{
StringBuilder sb = new StringBuilder();
sb.Append((char)0x1B);
sb.Append((char)0x51);
sb.Append((char)0x41);
string pay = string.Format("{0:F2}", factpay);
for (int i = 0; i < pay.Length; i++)
{
sb.Append((char)pay[i]);
}
sb.Append((char)0x0D);
com.WriteLine(sb.ToString());
sb.Remove(0, sb.ToString().Length);
sb.Append((char)0x1B);
sb.Append((char)0x73);
sb.Append((char)0x33);
com.WriteLine(sb.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 找零金额
/// </summary>
/// <param name="returnmoney"></param>
[Description("找零金额")]
public void PosScreenShowReturnMoney(decimal returnmoney)
{
try
{
if (com.IsOpen)
{
StringBuilder sb = new StringBuilder();
sb.Append((char)0x1B);
sb.Append((char)0x51);
sb.Append((char)0x41);
string pay = string.Format("{0:F2}", returnmoney);
for (int i = 0; i < pay.Length; i++)
{
sb.Append((char)pay[i]);
}
sb.Append((char)0x0D);
com.WriteLine(sb.ToString());
sb.Remove(0, sb.ToString().Length);
sb.Append((char)0x1B);
sb.Append((char)0x73);
sb.Append((char)0x34);
com.WriteLine(sb.ToString());
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}