Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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;
            }
        }