POS 打印屏顯指令的發送

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

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章