您的位置:首页 > 编程语言 > C#

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,我汇总后写再上面的代码里面,大家一起用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐