c# 中崎_C# 打开钱箱支持北洋、佳博、爱普生
///
///执行开钱箱操作
///没钱箱或打印机原功能都可以正常使用
///
publicvoidExecuteOpenCashBoxOperate()
{
stringl_strDefaultPortName="";
stringl_strDefaultBrand="";
if(serverCommon.ReadLocalSet("PrintSet","UseCashBox","0")=="0")
{//如果不使用钱箱直接退出,默认不使用钱箱
return;
}
try
{
//获取默认打印机的相关信息
stringl_strSQL=string.Format("SELECT*fromWin32_Printerwheredefault=true");
ManagementObjectSearchersearcher=newManagementObjectSearcher(l_strSQL);
ManagementObjectCollectionprinters=searcher.Get();
foreach(ManagementObjectprintinprinters)
{
l_strDefaultPortName=print["PortName"].ToString();
l_strDefaultBrand=print["DriverName"].ToString();//驱动名称不能冲突做为识别牌子的标准
}
if(string.IsNullOrEmpty(l_strDefaultPortName))return;
stringl_strNetIP=serverCommon.ReadLocalSet("PrintSet","NetIP","192.168.0.31");
stringl_strNetPort=serverCommon.ReadLocalSet("PrintSet","NetPort","9100");
stringl_strBaudRate=serverCommon.ReadLocalSet("PrintSet","BaudRate","38400");
stringl_strDataBits=serverCommon.ReadLocalSet("PrintSet","DataBits","128");
intl_intPortCOM=Int32.Parse(serverCommon.ReadLocalSet("PrintSet","PortCOM","2"));
intl_intBaudRateCOM=Int32.Parse(serverCommon.ReadLocalSet("PrintSet","BaudRateCOM","9600"));
intl_intDataBitsCOM=Int32.Parse(serverCommon.ReadLocalSet("PrintSet","DataBitsCOM","8"));
if(l_strDefaultBrand.IndexOf("BTP")>-1&&l_strDefaultPortName.IndexOf("USB")>-1)
{
OpenBYCashBox();
}
elseif(l_strDefaultBrand.IndexOf("GP")>-1&&l_strDefaultPortName.IndexOf("IP")>-1)
{
OpenJBCashBox(l_strNetIP,l_strNetPort);
}
elseif(l_strDefaultBrand.IndexOf("EPSON")>-1)
{
OpenEPSONCashBox(l_intPortCOM,l_intBaudRateCOM,l_intDataBitsCOM);
//OpenEPSONCashBox(2,9600,8);
}
}
catch
{
}
finally
{//当WMI服务关闭的时候
}
}
privatevoidOpenBYCashBox()
{
boolIsOpen=false;
BeiYangOPOSBYOPOS=newBeiYangOPOS();
try
{
IsOpen=BYOPOS.OpenUSBPort("BYUSB-0");
if(IsOpen)
{
IntPtrres=BeiYangOPOS.POS_KickOutDrawer(0x00,100,80);
}
}
finally
{
BYOPOS.ClosePrinterPort();
}
}
privatevoidOpenJBCashBox(stringa_strNetIP,stringa_strPort)
{
IPAddressServeIP=IPAddress.Parse(a_strNetIP);
IPEndPointremoteEP=newIPEndPoint(ServeIP,Int32.Parse(a_strPort));
SocketclientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
clientSocket.Connect(remoteEP);
byte[]byteA=newbyte[]{0x1B,0x70,0x00,0x80,0xFF};//据说是佳博所有版本通用命令
//byte[]byteA=newbyte[]{0x10,0x14,0x01,0x01,0x03};
clientSocket.Send(byteA);
}
finally
{
clientSocket.Close();
}
}
privatevoidOpenEPSONCashBox(inta_strPortName,inta_intBaudRate,inta_intDataBits)
{
System.IO.Ports.SerialPortsp=newSystem.IO.Ports.SerialPort();
sp.PortName="COM"+a_strPortName.ToString();
sp.BaudRate=a_intBaudRate;
sp.DataBits=a_intDataBits;
sp.ReadTimeout=2000;
sp.Parity=System.IO.Ports.Parity.None;
sp.StopBits=System.IO.Ports.StopBits.OnePointFive;
try
{
sp.Open();
byte[]byteA={0x1B,0x70,0x00,0x45,0x45};
sp.Write(byteA,0,byteA.Length);
System.Threading.Thread.Sleep(100);
}
finally
{//如果端口被占用需要重新设置
sp.Close();
}
}
读取配置文件的类
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Runtime.InteropServices;
usingSystem.IO.Ports;
usingSystem.Drawing.Printing;
namespace××××××××××××××
{
///
///北洋OPOS指令集二次开发包DLL调用
///
///备注:
///因为北洋的demo包里没有C#的,所以参考delphi包的代码转成了C#的.
///北洋的dll支持市面上所有的支持ESC/POS指令的小票打印机的打印(EPSON,佳博,中崎等)
///
///如果有任何修改请邮件通知本人,欢迎志同道合的朋友共同交流;
///coder:萧远峰mail:71008973@qq.com
///
///POSDLL动态库的出口函数是用来直接控制POS打印机工作的,
///分为四个部分:通用函数、标准模式打印函数、页模式打印函数、调试等函数。
///
publicclassBeiYangOPOS
{
conststring_DllVer="1.4";
privatestaticPrintDocumentfPrintDocument=newPrintDocument();
///
///获取动态库版本号
///
publicstringGetDllVer
{
get
{
return_DllVer;
}
}
///
///设备打开后的句柄
///
publicIntPtrPOS_IntPtr;
///
///函数返回值
///
publicuintPOS_SUCCESS=1001;//函数执行成功
publicuintPOS_FAIL=1002;//函数执行失败
publicuintPOS_ERROR_INVALID_HANDLE=1101;//端口或文件的句柄无效
publicuintPOS_ERROR_INVALID_PARAMETER=1102;//参数无效
publicuintPOS_ERROR_NOT_BITMAP=1103;//不是位图格式的文件
publicuintPOS_ERROR_NOT_MONO_BITMAP=1104;//位图不是单色的
publicuintPOS_ERROR_BEYONG_AREA=1105;//位图超出打印机可以处理的大小
publicuintPOS_ERROR_INVALID_PATH=1106;//没有找到指定的文件路径或名
///
///停止位
///
publicuintPOS_COM_ONESTOPBIT=0x00;//停止位为1
publicuintPOS_COM_ONE5STOPBITS=0x01;//停止位为1.5
publicuintPOS_COM_TWOSTOPBITS=0x02;//停止位为2
///
///奇偶校验
///
publicuintPOS_COM_NOPARITY=0x00;//无校验
publicuintPOS_COM_ODDPARITY=0x01;//奇校验
publicuintPOS_COM_EVENPARITY=0x02;//偶校验
publicuintPOS_COM_MARKPARITY=0x03;//标记校验
publicuintPOS_COM_SPACEPARITY=0x04;//空格校验
///
///其他COM口参数及端口类型定义
///
publicuintPOS_COM_DTR_DSR=0x00;//流控制为DTR/DST
publicuintPOS_COM_RTS_CTS=0x01;//流控制为RTS/CTS
publicuintPOS_COM_XON_XOFF=0x02;//流控制为XON/OFF
publicuintPOS_COM_NO_HANDSHAKE=0x03;//无握手
publicuintPOS_OPEN_PARALLEL_PORT=0x12;//打开并口通讯端口
publicuintPOS_OPEN_BYUSB_PORT=0x13;//打开USB通讯端口
publicuintPOS_OPEN_PRINTNAME=0X14;//打开打印机驱动程序
publicuintPOS_OPEN_NETPORT=0x15;//打开网络接口
publicuintPOS_CUT_MODE_FULL=0x00;//全切
publicuintPOS_CUT_MODE_PARTIAL=0x01;//半切
///
///打开POS机的端口开始会话
///
///
///指向以null结尾的打印机名称或端口名称。
///当参数nParam的值为POS_COM_DTR_DSR、POS_COM_RTS_CTS、POS_COM_XON_XOFF或POS_COM_NO_HANDSHAKE时,“COM1”,“COM2”,“COM3”,“COM4”等表示串口;
///当参数nParam的值为POS_OPEN_PARALLEL_PORT时,“LPT1”,“LPT2”等表示并口;
///当参数nParam的值为POS_OPEN_BYUSB_PORT时,“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”等表示USB端口。
///当参数nParam的值为POS_OPEN_PRINTNAME时,表示打开指定的打印机。
///当参数nParam的值为POS_OPEN_NETPORT时,表示打开指定的网络接口,如“192.168.10.251”表示网络接口IP地址
///串口通信需要的波特率
///串口通信需要的数据位
///串口通信需要的停止位
///串口通信需要的是否要奇偶校验
///指向以null结尾的打印机名称或端口名称。
///参数nParam的值为POS_COM_DTR_DSR、POS_COM_RTS_CTS、POS_COM_XON_XOFF或POS_COM_NO_HANDSHAKE时,
///“COM1”,“COM2”,“COM3”,“COM4”等表示串口;
///当参数nParam的值为POS_OPEN_PARALLEL_PORT时,“LPT1”,“LPT2”等表示并口;
///当参数nParam的值为POS_OPEN_BYUSB_PORT时,“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”等表示USB端口。
///当参数nParam的值为POS_OPEN_PRINTNAME时,表示打开指定的打印机。
///如果函数调用成功,返回一个已打开的端口句柄。如果函数调用失败,返回值为INVALID_HANDLE_VALUE(-1)。
[DllImport("POSDLL.dll",CharSet=CharSet.Ansi)]
publicstaticexternIntPtrPOS_Open([MarshalAs(UnmanagedType.LPStr)]stringlpName,
uintnComBaudrate,
uintnComDataBits,
uintnComStopBits,
uintnComParity,
uintnParam);
///
///关闭已经打开的并口或串口,USB端口,网络接口或打印机。
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_Close();
///
///复位打印机,把打印缓冲区中的数据清除,字符和行高的设置被清除,打印模式被恢复到上电时的缺省模式。
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_Reset();
///
///设置打印机的移动单位。
///
///把水平方向上的移动单位设置为25.4/nHorizontalMU毫米。可以为0到255。
///把垂直方向上的移动单位设置为25.4/nVerticalMU毫米。可以为0到255。
///
///如果函数成功,则返回值为POS_SUCCESS。
///如果函数失败,则返回值为以下值之一:POS_FAILPOS_ERROR_INVALID_HANDLEPOS_ERROR_INVALID_PARAMETER
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetMotionUnit(uintnHorizontalMU,uintnVerticalMU);
///
///选择国际字符集和代码页
///
///
///指定国际字符集。不同的国际字符集对0x23到0x7E的ASCII码值对应的符号定义是不同的。
///可以为以下列表中所列值之一。
///0x00U.S.A0x01France0x02Germany0x03U.K.0x04DenmarkI0x05Sweden
///0x06Italy0x07SpainI0x08Japan0x09Nonway0x0ADenmarkII0x0BSpainII
///0x0CLatinAmerica0x0DKorea
///
///指定字符的代码页。不同的代码页对0x80到0xFF的ASCII码值对应的符号定义是不同的。
///0x00PC437[U.S.A.StandardEurope0x01Reserved0x02PC850[Multilingual]
///0x03PC860[Portuguese]0x04PC863[Canadian-French]0x05PC865[Nordic]
///0x12PC8520x13PC858
///
///
///如果函数成功,则返回值为POS_SUCCESS。
///如果函数失败,则返回值为以下值之一:POS_FAILPOS_ERROR_INVALID_HANDLEPOS_ERROR_INVALID_PARAMETER
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetCharSetAndCodePage(uintnCharSet,uintnCodePage);
///
///POS字体样式
///
///
publicuintPOS_FONT_TYPE_STANDARD=0x00;//标准ASCII
publicuintPOS_FONT_TYPE_COMPRESSED=0x01;//压缩ASCII
publicuintPOS_FONT_TYPE_UDC=0x02;//用户自定义字符
publicuintPOS_FONT_TYPE_CHINESE=0x03;//标准“宋体”
publicuintPOS_FONT_STYLE_NORMAL=0x00;//正常
publicuintPOS_FONT_STYLE_BOLD=0x08;//加粗
publicuintPOS_FONT_STYLE_THIN_UNDERLINE=0x80;//1点粗的下划线
publicuintPOS_FONT_STYLE_THICK_UNDERLINE=0x100;//2点粗的下划线
publicuintPOS_FONT_STYLE_UPSIDEDOWN=0x200;//倒置(只在行首有效)
publicuintPOS_FONT_STYLE_REVERSE=0x400;//反显(黑底白字)
publicuintPOS_FONT_STYLE_SMOOTH=0x800;//平滑处理(用于放大时)
publicuintPOS_FONT_STYLE_CLOCKWISE_90=0x1000;//每个字符顺时针旋转90度
///
///把将要打印的字符串数据发送到打印缓冲区中,并指定X方向(水平)上的绝对起始点位置,
///指定每个字符宽度和高度方向上的放大倍数、类型和风格。
///
///指向以null结尾的字符串缓冲区
///指定X方向(水平)的起始点位置离左边界的点数。
///指定字符的宽度方向上的放大倍数。可以为1到6。
///指定字符高度方向上的放大倍数。可以为1到6。
///指定字符的字体类型。
///指定字符的字体风格。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_S_TextOut([MarshalAs(UnmanagedType.LPStr)]stringpszString,
uintnOrgx,uintnWidthTimes,uintnHeightTimes,
uintnFontType,uintnFontStyle);
///
///设置POS的打印模式(只有两种页模式和标准模式)
///
///
///POS_PRINT_MODE_STANDARD0x00标准模式(行模式)
///POS_PRINT_MODE_PAGE0x01页模式
///POS_PRINT_MODE_BLACK_MARK_LABEL0x02黑标记标签模式
///POS_PRINT_MODE_WHITE_MARK_LABEL0x03白标记标签模式
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetMode(uintnPrintMode);
///
///设置字符的行高。
///
///指定行高点数。可以为0到255。每点的距离与打印头分辨率相关。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetLineSpacing(uintnDistance);
///
///设置字符的右间距(相邻两个字符的间隙距离)。
///
///指定右间距的点数。可以为0到255。每点的距离与打印头分辨率相关。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetRightSpacing(intnDistance);
///
///向前走纸。
///1.如果在标准打印模式(行模式)下打印文本,则打印缓冲区中的数据,且打印位置自动移动到下一行的行首。
///2.如果在标准打印模式(行模式)下打印位图,则在指定的位置打印位图,且打印位置自动移动到下一行的行首。
///3.如果在页模式或标签模式下,则把需要打印的数据设置在指定的位置,同时把打印位置移动到下一个行首,
///但是并不立即进纸并打印,而是一直到调用POS_PL_Print函数时才打印。
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_FeedLine();
///
///打印头换n行
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_FeedLines(uintnLines);
///
///切纸
///
///模式编号半切或是全切
///走位的距离
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_CutPaper(uintnMode,uintnDistance);
///
///设置右边距
///
///右边距
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_SetRightSpacing(uintnDistance);
///
///预下载一幅位图到打印机的RAM中,同时指定此位图的ID号。
///
///指向以null结尾的表示位图路径及其文件名的字符串。
///指定将要下载的位图的ID号。可以为0到7。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PreDownloadBmpToRAM([MarshalAs(UnmanagedType.LPStr)]stringpszPath,uintnID);
///
///下载并打印位图
///
///指向以null结尾的包含位图文件路径及其名称的字符串。
///指定将要打印的位图和左边界的距离点数。可以为0到65535点。
///指定位图的打印模式。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_S_DownloadAndPrintBmp([MarshalAs(UnmanagedType.LPStr)]stringpszPath,uintnOrgx,uintnMode);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_S_PrintBmpInRAM(uintnID,uintnOrgx,uintnMode);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_S_PrintBmpInFlash(uintnID,uintnOrgx,uintnMode);
///
///通过串口返回当前打印机的状态。此函数是实时的。
///
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_RTQueryStatus(byte[]address);
///
///通过串口查询打印机当前的状态。此函数是非实时的。
///
///
///指向返回的状态数据的缓冲区,缓冲区大小为1个字节。
///0,10/1容纸器中有纸/纸将用尽2,30/1打印头处有纸/无纸
///4,50/1钱箱连接器引脚3的电平为低/高(表示打开或关闭)
///6,70保留(固定为0)
///
///设置查询状态时大约的超时时间(毫秒)。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_QueryStatus(byte[]pszStatus,intnTimeouts);
///
///通过网络接口查询返回当前打印机的状态。
///
///设备IP地址。如“192.168.10.251”。
///
///指向接收返回状态的缓冲区,缓冲区大小为1个字节。
///00/1钱箱连接器引脚3的电平为低/高(表示打开或关闭)
///10/1打印机联机/脱机
///20/1上盖关闭/打开
///30/1没有/正在由Feed键按下而进纸
///40/1打印机没有/有出错
///50/1切刀没有/有出错
///60/1有纸/纸将尽(纸将尽传感器探测)
///70/1有纸/纸用尽(纸传感器探测)
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternintPOS_NETQueryStatus([MarshalAs(UnmanagedType.LPStr)]stringipAddress,outBytepszStatus);
///
///设置并打印条码。
///
///指向以null结尾的字符串。每个字符允许的范围和格式与具体条码类型有关。
///指定将要打印的条码的水平起始点与左边界的距离点数。可以为0到65535。
///
///指定条码的类型。可以为以下列表中所列值之一。
///POS_BARCODE_TYPE_UPC_A0x41UPC-APOS_BARCODE_TYPE_UPC_E0x42UPC-C
///POS_BARCODE_TYPE_JAN130x43JAN13(EAN13)POS_BARCODE_TYPE_JAN80x44JAN8(EAN8)
///POS_BARCODE_TYPE_CODE390x45CODE39POS_BARCODE_TYPE_ITF0x46INTERLEAVED2OF5
///POS_BARCODE_TYPE_CODEBAR0x47CODEBARPOS_BARCODE_TYPE_CODE930x4825
///POS_BARCODE_TYPE_CODE1280x49CODE128
///
///指定条码的基本元素宽度。
///20.25mm0.25mm0.625mm30.375mm0.375mm1.0mm40.5mm0.5mm1.25mm
///50.625mm0.625mm1.625mm60.75mm0.75mm1.875mm
///
///指定条码的高度点数。可以为1到255。默认值为162点。
///
///指定HRI(HumanReadableInterpretation)字符的字体类型。可以为以下列表中所列值之一。
///POS_FONT_TYPE_STANDARD0x00标准ASCIIPOS_FONT_TYPE_COMPRESSED0x01压缩ASCII
///
///
///指定HRI(HumanReadableInterpretation)字符的位置。
///POS_HRI_POSITION_NONE0x00不打印POS_HRI_POSITION_ABOVE0x01只在条码上方打印
///POS_HRI_POSITION_BELOW0x02只在条码下方打印POS_HRI_POSITION_BOTH0x03条码上、下方都打印
///
///指定由参数pszInfoBuffer指向的字符串个数,即将要发送给打印机的字符总数。具体值与条码类型有关。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_S_SetBarcode([MarshalAs(UnmanagedType.LPStr)]stringpszInfo,
uintnOrgx,uintnType,uintnWidthX,uintnheight,
uintnHriFontType,uintnHriFontPosition,uintnBytesOfInfo);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_SetArea(uintnOrgx,uintnOrgY,uintnWidth,uintnheight,uintnDirection);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_TextOut([MarshalAs(UnmanagedType.LPStr)]stringpszString,uintnOrgx,uintnOrgY,
uintnWidthTimes,uintnHeightTimes,uintnFontType,uintnFontStyle);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_PrintBmpInRAM(uintnID,uintnOrgx,uintnOrgY,uintnMode);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_PrintBmpInFlash(uintnID,uintnOrgx,uintnOrgY,uintnMode);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_SetBarcode([MarshalAs(UnmanagedType.LPStr)]stringpszInfo,
uintnOrgx,uintnOrgY,uintnType,uintnWidthX,uintnheight,
uintnHriFontType,uintnHriFontPosition,uintnBytesOfInfo);
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_Clear();
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_PL_Print();
///
///往钱箱引脚发送脉冲以打开钱箱。
///
///指定钱箱的引脚。0x00钱箱连接器引脚20x01钱箱连接器引脚5
///指定往钱箱发送的高电平脉冲保持时间,即nOnTimes×2毫秒。可以为1到255。
///指定往钱箱发送的低电平脉冲保持时间,即nOffTimes×2毫秒。可以为1到255。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_KickOutDrawer(uintnID,uintnOnTimes,uintnOffTimes);
///
///新建一个打印作业。
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternboolPOS_StartDoc();
///
///结束一个打印作业。
///
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternboolPOS_EndDoc();
///
///发送数据到端口或文件。通用端口打印可以使用此函数一般不能设置字体大小样式等
///
///端口或文件句柄。可以通过POS_Open来获取
///指向将要发送的数据缓冲区。
///指定将要发送的数据的字节数。
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_WriteFile(IntPtrhPort,byte[]pszData,uintnBytesToWrite);
///
///从串口,或USB端口或文件读数据到指定的缓冲区。
///
///端口或文件句柄。可以通过POS_Open来获取
///指向将要读取的数据缓冲区。
///数据的字节数
///可能是读取数据的间隔时间
///
[DllImport("POSDLL.dll",SetLastError=true)]
publicstaticexternIntPtrPOS_ReadFile(IntPtrhPort,byte[]pszData,uintnBytesToRead,uintnTimeouts);
///
///打开打印设备的串口
///
///串口对象(需要先初始化并测试参数都有效的情况下,传进来)
///是否打开成功
publicboolOpenComPort(refSerialPortPrintSerialPort)
{
uinti_stopbits=0;
if(PrintSerialPort.StopBits==StopBits.One)
i_stopbits=POS_COM_ONESTOPBIT;
if(PrintSerialPort.StopBits==StopBits.OnePointFive)
i_stopbits=POS_COM_ONE5STOPBITS;
if(PrintSerialPort.StopBits==StopBits.Two)
i_stopbits=POS_COM_TWOSTOPBITS;
uinti_nComParity=0;
if(PrintSerialPort.Parity==Parity.None)
i_nComParity=POS_COM_NOPARITY;
if(PrintSerialPort.Parity==Parity.Even)
i_nComParity=POS_COM_EVENPARITY;
if(PrintSerialPort.Parity==Parity.Odd)
i_nComParity=POS_COM_ODDPARITY;
if(PrintSerialPort.Parity==Parity.Space)
i_nComParity=POS_COM_SPACEPARITY;
if(PrintSerialPort.Parity==Parity.Mark)
i_nComParity=POS_COM_MARKPARITY;
uinti_para=0;
if(PrintSerialPort.Handshake==Handshake.None)
i_para=POS_COM_NO_HANDSHAKE;
if(PrintSerialPort.Handshake==Handshake.RequestToSend)
i_para=POS_COM_DTR_DSR;
if(PrintSerialPort.Handshake==Handshake.RequestToSendXOnXOff)
i_para=POS_COM_RTS_CTS;
if(PrintSerialPort.Handshake==Handshake.XOnXOff)
i_para=POS_COM_XON_XOFF;
POS_IntPtr=POS_Open(PrintSerialPort.PortName,
(uint)PrintSerialPort.BaudRate,
(uint)PrintSerialPort.DataBits,
i_stopbits,i_nComParity,i_para);
if((int)POS_IntPtr!=-1)
returntrue;
else
returnfalse;
}
///
///打开打印设备并口
///
///并口名称
///是否打开成功
publicboolOpenLPTPort(stringLPTPortName)
{
POS_IntPtr=POS_Open(LPTPortName,0,0,0,0,POS_OPEN_PARALLEL_PORT);
if((int)POS_IntPtr!=-1)
returntrue;
else
returnfalse;
}
///
///打开打印设备的网口
///
///设备的IP地址
///是否打开成功
publicboolOpenNetPort(stringIPAddress)
{
POS_IntPtr=POS_Open(IPAddress,0,0,0,0,POS_OPEN_NETPORT);
if((int)POS_IntPtr!=-1)
returntrue;
else
returnfalse;
}
///
///打开打印设备的USB端口
///
///“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”
///是否打开成功
publicboolOpenUSBPort(stringUSBPortName)
{
POS_IntPtr=POS_Open(USBPortName,0,0,0,0,POS_OPEN_BYUSB_PORT);
if((int)POS_IntPtr!=-1)
returntrue;
else
returnfalse;
}
///
///使用windows打印驱动程序来驱动OPOS设备
///
///打印驱动程序对应的打印机名称
///是否打开成功
publicboolOpenPrinter(stringPrintName)
{
POS_IntPtr=POS_Open(PrintName,0,0,0,0,POS_OPEN_PRINTNAME);
if((int)POS_IntPtr!=-1)
returntrue;
else
returnfalse;
}
///
///关闭设备端口
///
///是否关闭成功
publicboolClosePrinterPort()
{
IntPtrtmpIntPtr=POS_Close();
return((uint)tmpIntPtr==POS_SUCCESS);
}
///
///获取本机默认打印机名称
///
publicstaticStringDefaultPrinter
{
get
{
returnfPrintDocument.PrinterSettings.PrinterName;
}
}
///
///获取本机的打印机列表。列表中的第一项就是默认打印机。
///
publicstaticListGetLocalPrinters()
{
ListfPrinters=newList();
fPrinters.Add(DefaultPrinter);//默认打印机始终出现在列表的第一项
foreach(StringfPrinterNameinPrinterSettings.InstalledPrinters)
{
if(!fPrinters.Contains(fPrinterName))
fPrinters.Add(fPrinterName);
}
returnfPrinters;
}
}
}
ViewCode
所引用的dll文件
这是年初写的一个打开钱箱的工具,北洋的网上有现成的代码,现在只写了其它的,网络端口的需要重新配置,串口的是用发命令的方式打开的。
不是支持所有钱箱,请大家合理利用,需要对开启WMI服务,一般都开启的,不需要管。
如果您手头的代码用到了其它钱箱,请用邮箱发给我,左上角的QQ,我汇总后写再上面的代码里面,大家一起用。
c# 中崎_C# 打开钱箱支持北洋、佳博、爱普生相关推荐
- c# 中崎_C# 打开钱箱支持北洋、佳博、爱普生
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- C# 打开钱箱支持北洋、佳博、爱普生
/// <summary>/// 执行开钱箱操作/// 没钱箱或打印机原功能都可以正常使用/// </summary>public void ExecuteOpenCashBo ...
- c# 中崎_C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)...
C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋.佳博.商祺等支持标准ESC/POS指令的POS打印机) 收藏 C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持 ...
- android lcd 显示图片,Android开发中通过AIDL文件中的方法打开钱箱,显示LCD屏幕
下载相关 资源文件 ,在项目中新建如下层级的文件夹,将源文件中的AIDL文件放入其中. ICallback:打印服务执行结果的回调 ITax:打印服务执行结果的回调 ILcdCallback:顾显反馈 ...
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋.佳博.商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱箱 ...
- 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机
C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋.佳博.商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱箱 支 ...
- eclipse java shell 窗体显示 bat运行不显示_java eclipse中如何实现点击主窗口sShell中的按钮打开另外一个子窗口sShell...
java eclipse中如何实现点击主窗口sShell中的按钮打开另外一个子窗口sShell 关注:97 答案:2 mip版 解决时间 2021-01-31 13:01 提问者╬═掵中注定 20 ...
- anaconda新建python2环境安装不了jupyterlab_Anaconda 5.0.0 JupyterLab 0.27.0 中配置多Python环境支持...
Anaconda 5.0.0 JupyterLab 0.27.0 中配置多Python环境支持 概述 Anaconda 5.0.0 中自带了 JupyterLab 0.27.0 版本,这是 Anaco ...
- SQLServer附加数据库提示“版本为661,无法打开,支持655版本……”
在我们使用别人导出的数据库的时候,有时候我们会通过附加数据库的方法,把别人导出的数据库附加到我们的电脑中,这时,或许你会遇到这种问题,附加时,提示版本为XXX,无法打开,支持AAA版本. 这是怎么回事 ...
- python中打开文件时只允许写入的模式是_详解python中各种文件打开模式
在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...
最新文章
- 通俗易懂的讲解区块链
- JS DATE对象详解
- FPGA专有名词的积累
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...
- 云服务器选ssd还是hdd_云服务器应该怎么选择?
- python中定义字典数据类型使用什么符号_python数据类型之字典类型-dict
- 民族融合 —— 魏晋南北朝
- 速看!不止零关税,RCEP的签订对普通百姓的影响都在这里
- 【图卷积网络】Graph Convolutional Network
- Python之nmap-ping扫描探测主机存活
- Flutter无限循环滑动的PageView
- python爬取boss直聘招聘信息_Python 爬取boss直聘招聘信息!
- Iscrool下拉刷新
- 王阳明:人心本是光明之镜 奈何因私欲黯淡无光
- 【算法与数据结构】—— 动态规划之背包问题
- IPSAN FCSAN理论比较
- 一个bug管理软件:BugFree
- 来我服的第一周学习总结 企业文化-网络通用技术
- 572. 另一棵树的子树————简单
- android的cooipad手机,苹果COO库克:Android平板电脑是大号智能手机
热门文章
- 此计算机缺少vc2005_spl_with_atl_fix_redist解决问题
- 《数据结构》C语言版 (清华严蔚敏考研版) 全书知识梳理
- wxPython 入门教程.
- ardupilot在Linux上设置SITL(FlightGear)
- Android知识大纲梳理
- 嵌入式C高质量编程培训心得笔记
- Python学习笔记
- 软考中级考试经验分享-系统集成项目管理工程师
- sitemap死链检测工具-免费sitemap死链检测抓取工具
- “仿QQ局域网聊天软件”项目-常用编程技巧总结