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;
}
}
}
}