/// <summary> /// 目前支持打开串口,指定打印机名称 /// </summary> /// <param name="lpName"></param> /// <param name="nComBaudrate"></param> /// <param name="nComDataBits"></param> /// <param name="nComStopBits"></param> /// <param name="nComParity"></param> /// <param name="nParam"></param> /// <returns></returns> public static int POS_Open(string lpName, int nComBaudrate, int nComDataBits, int nComStopBits, int nComParity, int nParam) { switch (nParam) { case POS_COM_DTR_DSR: case POS_COM_RTS_CTS: case POS_COM_XON_OXFF: case POS_COM_NO_HANDSHAKE: { POS_COM_HANDLE = IOCONTROL.CreateFile(lpName, IOCONTROL.GENERIC_READ | IOCONTROL.GENERIC_WRITE, IOCONTROL.FILE_SHARE_READ | IOCONTROL.FILE_SHARE_WRITE, 0, IOCONTROL.OPEN_EXISTING, 0, 0); IOCONTROL.DCB ComDcb = new IOCONTROL.DCB(); if (IOCONTROL.GetCommState(POS_COM_HANDLE, ref ComDcb)) { ComDcb.BaudRate = (uint)nComBaudrate; ComDcb.ByteSize = (byte)nComDataBits; ComDcb.StopBits = (byte)nComStopBits; ComDcb.Parity = (byte)nComParity; switch (nParam) { case POS_COM_DTR_DSR: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fDtrControl, IOCONTROL.DTR_CONTROL_ENABLE, ComDcb.fFlags); break; case POS_COM_RTS_CTS: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fRtsControl, IOCONTROL.RTS_CONTROL_ENABLE, ComDcb.fFlags); break; case POS_COM_XON_OXFF: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fOutX, 1, ComDcb.fFlags); ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fInX, 1, ComDcb.fFlags); break; case POS_COM_NO_HANDSHAKE: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fRtsControl, IOCONTROL.RTS_CONTROL_DISABLE, ComDcb.fFlags); ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fDtrControl, IOCONTROL.DTR_CONTROL_DISABLE, ComDcb.fFlags); break; default: break; } if (IOCONTROL.SetCommState(POS_COM_HANDLE, ref ComDcb)) { POS_COM_SELECTED = true; return POS_COM_HANDLE; } else return INVALID_HANDLE_VALUE; } else return INVALID_HANDLE_VALUE; } case POS_OPEN_PARALLEL_PORT: { return INVALID_HANDLE_VALUE; } case POS_OPEN_BYUSB_PORT: { return INVALID_HANDLE_VALUE; } case POS_OPEN_PRINTNAME: { if (PRINTEBYNAME.OpenPrinter(lpName, ref POS_PRINTNAME_HANDLE, IntPtr.Zero)) { POS_PRINTNAME_SELECTED = true; return POS_PRINTNAME_HANDLE; } else return INVALID_HANDLE_VALUE; } case POS_OPEN_NETPORT: { return INVALID_HANDLE_VALUE; } default: return INVALID_HANDLE_VALUE; } }
/// <summary> /// 目前支持打开串口,指定打印机名称,指定网口(端口号为9100) /// </summary> /// <param name="lpName"></param> /// <param name="nComBaudrate"></param> /// <param name="nComDataBits"></param> /// <param name="nComStopBits"></param> /// <param name="nComParity"></param> /// <param name="nParam"></param> /// <returns></returns> public static int POS_Open(string lpName, int nComBaudrate, int nComDataBits, int nComStopBits, int nComParity, int nParam) { switch (nParam) { case POS_COM_DTR_DSR: case POS_COM_RTS_CTS: case POS_COM_XON_OXFF: case POS_COM_NO_HANDSHAKE: { POS_COM_HANDLE = IOCONTROL.CreateFile(lpName, IOCONTROL.GENERIC_READ | IOCONTROL.GENERIC_WRITE, IOCONTROL.FILE_SHARE_READ | IOCONTROL.FILE_SHARE_WRITE, 0, IOCONTROL.OPEN_EXISTING, 0, 0); IOCONTROL.DCB ComDcb = new IOCONTROL.DCB(); if (IOCONTROL.GetCommState(POS_COM_HANDLE, ref ComDcb)) { ComDcb.BaudRate = (uint)nComBaudrate; ComDcb.ByteSize = (byte)nComDataBits; ComDcb.StopBits = (byte)nComStopBits; ComDcb.Parity = (byte)nComParity; switch (nParam) { case POS_COM_DTR_DSR: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fDtrControl, IOCONTROL.DTR_CONTROL_ENABLE, ComDcb.fFlags); break; case POS_COM_RTS_CTS: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fRtsControl, IOCONTROL.RTS_CONTROL_ENABLE, ComDcb.fFlags); break; case POS_COM_XON_OXFF: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fOutX, 1, ComDcb.fFlags); ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fInX, 1, ComDcb.fFlags); break; case POS_COM_NO_HANDSHAKE: ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fRtsControl, IOCONTROL.RTS_CONTROL_DISABLE, ComDcb.fFlags); ComDcb.fFlags = IOCONTROL.SetFlags(IOCONTROL.fDtrControl, IOCONTROL.DTR_CONTROL_DISABLE, ComDcb.fFlags); break; default: break; } if (IOCONTROL.SetCommState(POS_COM_HANDLE, ref ComDcb)) { POS_COM_SELECTED = true; return POS_COM_HANDLE; } else return INVALID_HANDLE_VALUE; } else return INVALID_HANDLE_VALUE; } case POS_OPEN_PARALLEL_PORT: { return INVALID_HANDLE_VALUE; } case POS_OPEN_BYUSB_PORT: { return INVALID_HANDLE_VALUE; } case POS_OPEN_PRINTNAME: { if (PRINTEBYNAME.OpenPrinter(lpName, ref POS_PRINTNAME_HANDLE, IntPtr.Zero)) { POS_PRINTNAME_SELECTED = true; return POS_PRINTNAME_HANDLE; } else return INVALID_HANDLE_VALUE; } case POS_OPEN_NETPORT: { IPAddress ip = IPAddress.Parse(lpName); IPEndPoint point = new IPEndPoint(ip, 9100); sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sc.Connect(point); if (sc.Connected) { POS_NETPORT_SELECTED = true; POS_NETPORT_HANDLE = (int)sc.Handle; return POS_NETPORT_HANDLE; } else return INVALID_HANDLE_VALUE; } default: return INVALID_HANDLE_VALUE; } }