C# 打开钱箱支持北洋、佳博、爱普生
2013-11-26 16:07
1081 查看
///<summary> ///执行开钱箱操作 ///没钱箱或打印机原功能都可以正常使用 ///</summary> 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×××××××××××××× { ///<summary> ///北洋OPOS指令集二次开发包DLL调用 /// ///备注: ///因为北洋的demo包里没有C#的,所以参考delphi包的代码转成了C#的. ///北洋的dll支持市面上所有的支持ESC/POS指令的小票打印机的打印(EPSON,佳博,中崎等) /// ///如果有任何修改请邮件通知本人,欢迎志同道合的朋友共同交流; ///coder:萧远峰mail:71008973@qq.com /// ///POSDLL动态库的出口函数是用来直接控制POS打印机工作的, ///分为四个部分:通用函数、标准模式打印函数、页模式打印函数、调试等函数。 ///</summary> publicclassBeiYangOPOS { conststring_DllVer="1.4"; privatestaticPrintDocumentfPrintDocument=newPrintDocument(); ///<summary> ///获取动态库版本号 ///</summary> publicstringGetDllVer { get { return_DllVer; } } ///<summary> ///设备打开后的句柄 ///</summary> publicIntPtrPOS_IntPtr; ///<summary> ///函数返回值 ///</summary> 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;//没有找到指定的文件路径或名 ///<summary> ///停止位 ///</summary> publicuintPOS_COM_ONESTOPBIT=0x00;//停止位为1 publicuintPOS_COM_ONE5STOPBITS=0x01;//停止位为1.5 publicuintPOS_COM_TWOSTOPBITS=0x02;//停止位为2 ///<summary> ///奇偶校验 ///</summary> publicuintPOS_COM_NOPARITY=0x00;//无校验 publicuintPOS_COM_ODDPARITY=0x01;//奇校验 publicuintPOS_COM_EVENPARITY=0x02;//偶校验 publicuintPOS_COM_MARKPARITY=0x03;//标记校验 publicuintPOS_COM_SPACEPARITY=0x04;//空格校验 ///<summary> ///其他COM口参数及端口类型定义 ///</summary> 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;//半切 ///<summary> ///打开POS机的端口开始会话 ///</summary> ///<paramname="lpName"> ///指向以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地址</param> ///<paramname="nComBaudrate">串口通信需要的波特率</param> ///<paramname="nComDataBits">串口通信需要的数据位</param> ///<paramname="nComStopBits">串口通信需要的停止位</param> ///<paramname="nComParity">串口通信需要的是否要奇偶校验</param> ///<paramname="nParam">指向以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时,表示打开指定的打印机。</param> ///<returns>如果函数调用成功,返回一个已打开的端口句柄。如果函数调用失败,返回值为INVALID_HANDLE_VALUE(-1)。</returns> [DllImport("POSDLL.dll",CharSet=CharSet.Ansi)] publicstaticexternIntPtrPOS_Open([MarshalAs(UnmanagedType.LPStr)]stringlpName, uintnComBaudrate, uintnComDataBits, uintnComStopBits, uintnComParity, uintnParam); ///<summary> ///关闭已经打开的并口或串口,USB端口,网络接口或打印机。 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_Close(); ///<summary> ///复位打印机,把打印缓冲区中的数据清除,字符和行高的设置被清除,打印模式被恢复到上电时的缺省模式。 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_Reset(); ///<summary> ///设置打印机的移动单位。 ///</summary> ///<paramname="nHorizontalMU">把水平方向上的移动单位设置为25.4/nHorizontalMU毫米。可以为0到255。</param> ///<paramname="nVerticalMU">把垂直方向上的移动单位设置为25.4/nVerticalMU毫米。可以为0到255。</param> ///<returns> ///如果函数成功,则返回值为POS_SUCCESS。 ///如果函数失败,则返回值为以下值之一:POS_FAILPOS_ERROR_INVALID_HANDLEPOS_ERROR_INVALID_PARAMETER</returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetMotionUnit(uintnHorizontalMU,uintnVerticalMU); ///<summary> ///选择国际字符集和代码页 ///</summary> ///<paramname="nCharSet"> ///指定国际字符集。不同的国际字符集对0x23到0x7E的ASCII码值对应的符号定义是不同的。 ///可以为以下列表中所列值之一。 ///0x00U.S.A0x01France0x02Germany0x03U.K.0x04DenmarkI0x05Sweden ///0x06Italy0x07SpainI0x08Japan0x09Nonway0x0ADenmarkII0x0BSpainII ///0x0CLatinAmerica0x0DKorea</param> ///<paramname="nCodePage"> ///指定字符的代码页。不同的代码页对0x80到0xFF的ASCII码值对应的符号定义是不同的。 ///0x00PC437[U.S.A.StandardEurope0x01Reserved0x02PC850[Multilingual] ///0x03PC860[Portuguese]0x04PC863[Canadian-French]0x05PC865[Nordic] ///0x12PC8520x13PC858 ///</param> ///<returns> ///如果函数成功,则返回值为POS_SUCCESS。 ///如果函数失败,则返回值为以下值之一:POS_FAILPOS_ERROR_INVALID_HANDLEPOS_ERROR_INVALID_PARAMETER</returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetCharSetAndCodePage(uintnCharSet,uintnCodePage); ///<summary> ///POS字体样式 ///</summary> /// 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度 ///<summary> ///把将要打印的字符串数据发送到打印缓冲区中,并指定X方向(水平)上的绝对起始点位置, ///指定每个字符宽度和高度方向上的放大倍数、类型和风格。 ///</summary> ///<paramname="pszString">指向以null结尾的字符串缓冲区</param> ///<paramname="nOrgx">指定X方向(水平)的起始点位置离左边界的点数。</param> ///<paramname="nWidthTimes">指定字符的宽度方向上的放大倍数。可以为1到6。</param> ///<paramname="nHeightTimes">指定字符高度方向上的放大倍数。可以为1到6。</param> ///<paramname="nFontType">指定字符的字体类型。</param> ///<paramname="nFontStyle">指定字符的字体风格。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_S_TextOut([MarshalAs(UnmanagedType.LPStr)]stringpszString, uintnOrgx,uintnWidthTimes,uintnHeightTimes, uintnFontType,uintnFontStyle); ///<summary> ///设置POS的打印模式(只有两种页模式和标准模式) ///</summary> ///<paramname="nPrintMode"> ///POS_PRINT_MODE_STANDARD0x00标准模式(行模式) ///POS_PRINT_MODE_PAGE0x01页模式 ///POS_PRINT_MODE_BLACK_MARK_LABEL0x02黑标记标签模式 ///POS_PRINT_MODE_WHITE_MARK_LABEL0x03白标记标签模式</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetMode(uintnPrintMode); ///<summary> ///设置字符的行高。 ///</summary> ///<paramname="nDistance">指定行高点数。可以为0到255。每点的距离与打印头分辨率相关。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetLineSpacing(uintnDistance); ///<summary> ///设置字符的右间距(相邻两个字符的间隙距离)。 ///</summary> ///<paramname="nDistance">指定右间距的点数。可以为0到255。每点的距离与打印头分辨率相关。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetRightSpacing(intnDistance); ///<summary> ///向前走纸。 ///1.如果在标准打印模式(行模式)下打印文本,则打印缓冲区中的数据,且打印位置自动移动到下一行的行首。 ///2.如果在标准打印模式(行模式)下打印位图,则在指定的位置打印位图,且打印位置自动移动到下一行的行首。 ///3.如果在页模式或标签模式下,则把需要打印的数据设置在指定的位置,同时把打印位置移动到下一个行首, ///但是并不立即进纸并打印,而是一直到调用POS_PL_Print函数时才打印。 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_FeedLine(); ///<summary> ///打印头换n行 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_FeedLines(uintnLines); ///<summary> ///切纸 ///</summary> ///<paramname="nMode">模式编号半切或是全切</param> ///<paramname="nDistance">走位的距离</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_CutPaper(uintnMode,uintnDistance); ///<summary> ///设置右边距 ///</summary> ///<paramname="nDistance">右边距</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_SetRightSpacing(uintnDistance); ///<summary> ///预下载一幅位图到打印机的RAM中,同时指定此位图的ID号。 ///</summary> ///<paramname="pszPath">指向以null结尾的表示位图路径及其文件名的字符串。</param> ///<paramname="nID">指定将要下载的位图的ID号。可以为0到7。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_PreDownloadBmpToRAM([MarshalAs(UnmanagedType.LPStr)]stringpszPath,uintnID); ///<summary> ///下载并打印位图 ///</summary> ///<paramname="pszPath">指向以null结尾的包含位图文件路径及其名称的字符串。</param> ///<paramname="nOrgx">指定将要打印的位图和左边界的距离点数。可以为0到65535点。</param> ///<paramname="nMode">指定位图的打印模式。</param> ///<returns></returns> [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); ///<summary> ///通过串口返回当前打印机的状态。此函数是实时的。 ///</summary> ///<paramname="address"></param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_RTQueryStatus(byte[]address); ///<summary> ///通过串口查询打印机当前的状态。此函数是非实时的。 ///</summary> ///<paramname="pszStatus"> ///指向返回的状态数据的缓冲区,缓冲区大小为1个字节。 ///0,10/1容纸器中有纸/纸将用尽2,30/1打印头处有纸/无纸 ///4,50/1钱箱连接器引脚3的电平为低/高(表示打开或关闭) ///6,70保留(固定为0) ///</param> ///<paramname="nTimeouts">设置查询状态时大约的超时时间(毫秒)。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_QueryStatus(byte[]pszStatus,intnTimeouts); ///<summary> ///通过网络接口查询返回当前打印机的状态。 ///</summary> ///<paramname="ipAddress">设备IP地址。如“192.168.10.251”。</param> ///<paramname="pszStatus"> ///指向接收返回状态的缓冲区,缓冲区大小为1个字节。 ///00/1钱箱连接器引脚3的电平为低/高(表示打开或关闭) ///10/1打印机联机/脱机 ///20/1上盖关闭/打开 ///30/1没有/正在由Feed键按下而进纸 ///40/1打印机没有/有出错 ///50/1切刀没有/有出错 ///60/1有纸/纸将尽(纸将尽传感器探测) ///70/1有纸/纸用尽(纸传感器探测) ///</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternintPOS_NETQueryStatus([MarshalAs(UnmanagedType.LPStr)]stringipAddress,outBytepszStatus); ///<summary> ///设置并打印条码。 ///</summary> ///<paramname="pszInfo">指向以null结尾的字符串。每个字符允许的范围和格式与具体条码类型有关。</param> ///<paramname="nOrgx">指定将要打印的条码的水平起始点与左边界的距离点数。可以为0到65535。</param> ///<paramname="nType"> ///指定条码的类型。可以为以下列表中所列值之一。 ///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</param> ///<paramname="nWidthX"> ///指定条码的基本元素宽度。 ///20.25mm0.25mm0.625mm30.375mm0.375mm1.0mm40.5mm0.5mm1.25mm ///50.625mm0.625mm1.625mm60.75mm0.75mm1.875mm ///</param> ///<paramname="nheight">指定条码的高度点数。可以为1到255。默认值为162点。</param> ///<paramname="nHriFontType"> ///指定HRI(HumanReadableInterpretation)字符的字体类型。可以为以下列表中所列值之一。 ///POS_FONT_TYPE_STANDARD0x00标准ASCIIPOS_FONT_TYPE_COMPRESSED0x01压缩ASCII ///</param> ///<paramname="nHriFontPosition"> ///指定HRI(HumanReadableInterpretation)字符的位置。 ///POS_HRI_POSITION_NONE0x00不打印POS_HRI_POSITION_ABOVE0x01只在条码上方打印 ///POS_HRI_POSITION_BELOW0x02只在条码下方打印POS_HRI_POSITION_BOTH0x03条码上、下方都打印 ///</param> ///<paramname="nBytesOfInfo">指定由参数pszInfoBuffer指向的字符串个数,即将要发送给打印机的字符总数。具体值与条码类型有关。</param> ///<returns></returns> [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(); ///<summary> ///往钱箱引脚发送脉冲以打开钱箱。 ///</summary> ///<paramname="nID">指定钱箱的引脚。0x00钱箱连接器引脚20x01钱箱连接器引脚5</param> ///<paramname="nOnTimes">指定往钱箱发送的高电平脉冲保持时间,即nOnTimes×2毫秒。可以为1到255。</param> ///<paramname="nOffTimes">指定往钱箱发送的低电平脉冲保持时间,即nOffTimes×2毫秒。可以为1到255。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_KickOutDrawer(uintnID,uintnOnTimes,uintnOffTimes); ///<summary> ///新建一个打印作业。 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternboolPOS_StartDoc(); ///<summary> ///结束一个打印作业。 ///</summary> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternboolPOS_EndDoc(); ///<summary> ///发送数据到端口或文件。通用端口打印可以使用此函数一般不能设置字体大小样式等 ///</summary> ///<paramname="hPort">端口或文件句柄。可以通过POS_Open来获取</param> ///<paramname="pszData">指向将要发送的数据缓冲区。</param> ///<paramname="nBytesToWrite">指定将要发送的数据的字节数。</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_WriteFile(IntPtrhPort,byte[]pszData,uintnBytesToWrite); ///<summary> ///从串口,或USB端口或文件读数据到指定的缓冲区。 ///</summary> ///<paramname="hPort">端口或文件句柄。可以通过POS_Open来获取</param> ///<paramname="pszData">指向将要读取的数据缓冲区。</param> ///<paramname="nBytesToRead">数据的字节数</param> ///<paramname="nTimeouts">可能是读取数据的间隔时间</param> ///<returns></returns> [DllImport("POSDLL.dll",SetLastError=true)] publicstaticexternIntPtrPOS_ReadFile(IntPtrhPort,byte[]pszData,uintnBytesToRead,uintnTimeouts); ///<summary> ///打开打印设备的串口 ///</summary> ///<paramname="PrintSerialPort">串口对象(需要先初始化并测试参数都有效的情况下,传进来)</param> ///<returns>是否打开成功</returns> 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; } ///<summary> ///打开打印设备并口 ///</summary> ///<paramname="LPTPortName">并口名称</param> ///<returns>是否打开成功</returns> publicboolOpenLPTPort(stringLPTPortName) { POS_IntPtr=POS_Open(LPTPortName,0,0,0,0,POS_OPEN_PARALLEL_PORT); if((int)POS_IntPtr!=-1) returntrue; else returnfalse; } ///<summary> ///打开打印设备的网口 ///</summary> ///<paramname="IPAddress">设备的IP地址</param> ///<returns>是否打开成功</returns> publicboolOpenNetPort(stringIPAddress) { POS_IntPtr=POS_Open(IPAddress,0,0,0,0,POS_OPEN_NETPORT); if((int)POS_IntPtr!=-1) returntrue; else returnfalse; } ///<summary> ///打开打印设备的USB端口 ///</summary> ///<paramname="USBPortName">“BYUSB-0”、“BYUSB-1”、“BYUSB-2”、“BYUSB-3”</param> ///<returns>是否打开成功</returns> publicboolOpenUSBPort(stringUSBPortName) { POS_IntPtr=POS_Open(USBPortName,0,0,0,0,POS_OPEN_BYUSB_PORT); if((int)POS_IntPtr!=-1) returntrue; else returnfalse; } ///<summary> ///使用windows打印驱动程序来驱动OPOS设备 ///</summary> ///<paramname="PrintName">打印驱动程序对应的打印机名称</param> ///<returns>是否打开成功</returns> publicboolOpenPrinter(stringPrintName) { POS_IntPtr=POS_Open(PrintName,0,0,0,0,POS_OPEN_PRINTNAME); if((int)POS_IntPtr!=-1) returntrue; else returnfalse; } ///<summary> ///关闭设备端口 ///</summary> ///<returns>是否关闭成功</returns> publicboolClosePrinterPort() { IntPtrtmpIntPtr=POS_Close(); return((uint)tmpIntPtr==POS_SUCCESS); } ///<summary> ///获取本机默认打印机名称 ///</summary> publicstaticStringDefaultPrinter { get { returnfPrintDocument.PrinterSettings.PrinterName; } } ///<summary> ///获取本机的打印机列表。列表中的第一项就是默认打印机。 ///</summary> publicstaticList<String>GetLocalPrinters() { List<String>fPrinters=newList<string>(); fPrinters.Add(DefaultPrinter);//默认打印机始终出现在列表的第一项 foreach(StringfPrinterNameinPrinterSettings.InstalledPrinters) { if(!fPrinters.Contains(fPrinterName)) fPrinters.Add(fPrinterName); } returnfPrinters; } } }
ViewCode
所引用的dll文件
这是年初写的一个打开钱箱的工具,北洋的网上有现成的代码,现在只写了其它的,网络端口的需要重新配置,串口的是用发命令的方式打开的。
不是支持所有钱箱,请大家合理利用,需要对开启WMI服务,一般都开启的,不需要管。
如果您手头的代码用到了其它钱箱,请用邮箱发给我,左上角的QQ,我汇总后写再上面的代码里面,大家一起用。
相关文章推荐
- C# 打开钱箱支持北洋、佳博、爱普生
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- C#打开超市钱箱
- Unity3d不支持vistual studio2012?用vs2012打开unity c#脚本进行编码的方法。
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机
- vs2010打开c#工程时 -- 无法打开项目文件“***.csproj”,因为此版本不支持该项目类型
- 基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机
- C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(四)
- C#中创建、打开、读取、写入、保存Excel的一般性代码
- C#打开Excel文件的后缀名els与elsx的使用
- c#中实现文件拖放打开的方法
- C#动态成生并打开网页
- 在WinCE下使用C#来打开一个外部程序
- 支持国货,利用C#操作WPS Office2013 实例