⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycom.cs

📁 利用手机或短信发射机发送短信的源码
💻 CS
📖 第 1 页 / 共 2 页
字号:
        private static extern bool CloseHandle(
         int hObject   // handle to object
         );

        public void Open()
        {

            DCB dcbCommPort = new DCB();
            COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
            //QUEUESIZE qsCommPort = new QUEUESIZE();


            // OPEN THE COMM PORT.

            hComm = CreateFile("\\.\\COM" + PortNum, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

            // IF THE PORT CANNOT BE OPENED, BAIL OUT.
            if (hComm == INVALID_HANDLE_VALUE)
            {
                throw (new ApplicationException("Comm Port Can Not Be Opened"));
            }

            // SET THE COMM QUEUESIZE.
            SetupComm(hComm, 4096,4096);

            //////////////////////////////////////////////////////////////////////////
            //SET THE PURGE
            //1,  Purge mask=TXABORT: Read requests
            //2,  Purge mask=RXABORT: Receive buffer
            //3,  Purge mask=TXABORT: Read requests, RXABORT: Receive buffer
            //4,  Purge mask=TXCLEAR: Write requests
            //5,  Purge mask=TXABORT: Read requests, TXCLEAR: Write requests
            //6,  Purge mask=RXABORT: Receive buffer, TXCLEAR: Write requests
            //7,  Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, TXCLEAR: Write requests
            //8,  Purge mask=RXCLEAR: Write buffer
            //9,  Purge mask=TXABORT: Read requests, RXCLEAR: Write buffer
            //10, Purge mask=RXABORT: Receive buffer, RXCLEAR: Write buffer
            //11, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, RXCLEAR: Write buffer
            //12, Purge mask=TXCLEAR: Write requests, RXCLEAR: Write buffer
            //13, Purge mask=TXABORT: Read requests, TXCLEAR: Write requests, RXCLEAR: Write buffer
            //14, Purge mask=RXABORT: Receive buffer, TXCLEAR: Write requests, RXCLEAR: Write buffer
            //15, Purge mask=TXABORT: Read requests, RXABORT: Receive buffer, TXCLEAR: Write requests, RXCLEAR: Write buffer
            PurgeComm(hComm, 15);

            // SET THE COMM TIMEOUTS.
            GetCommTimeouts(hComm, ref ctoCommPort);
            ctoCommPort.ReadIntervalTimeout = 100;
            ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
            ctoCommPort.ReadTotalTimeoutMultiplier = 0;
            ctoCommPort.WriteTotalTimeoutMultiplier = 0;
            ctoCommPort.WriteTotalTimeoutConstant = WriteTimeout;
            SetCommTimeouts(hComm, ref ctoCommPort);

            // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
            // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
            // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
            // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
            // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.

            dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
            GetCommState(hComm, ref dcbCommPort);
            dcbCommPort.BaudRate = BaudRate;
            dcbCommPort.Parity = Parity; //NOPARITY
            dcbCommPort.ByteSize = ByteSize;
            dcbCommPort.StopBits = StopBits;
            SetCommState(hComm, ref dcbCommPort);
            //////////////////////////////////////////////////////////////////////////
            //设置SET THE COMM WAITMASK
            /*
                //1,2,3…40,40以后未整理
                WaitMask=RXCHAR: Any Character received
                WaitMask=RXFLAG: Received certain character
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character
                WaitMask=TXEMPTY: Transmitt Queue Empty
                WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty
                WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, 
                WaitMask=CTS: CTS changed state
                WaitMask=RXCHAR: Any Character received, CTS: CTS changed state
                WaitMask=RXFLAG: Received certain character, CTS: CTS changed state
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, CTS: 
                WaitMask=TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state
                WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, CTS: 
                WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS: 
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, 
                WaitMask=DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, DSR: DSR changed state
                WaitMask=RXFLAG: Received certain character, DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, DSR: 
                WaitMask=TXEMPTY: Transmitt Queue Empty, DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, DSR: 
                WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, DSR: 
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, 004150: 
                WaitMask=CTS: CTS changed state, DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, CTS: CTS changed state, DSR: DSR changed 
                WaitMask=RXFLAG: Received certain character, CTS: CTS changed state, DSR: DSR 
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, CTS: CTS changed state, DSR: DSR changed state
                WaitMask=TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
                WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, CTS: CTS changed state, DSR: DSR changed state
                WaitMask=RLSD: RLSD changed state
                WaitMask=RXCHAR: Any Character received, RLSD: RLSD changed state
                WaitMask=RXFLAG: Received certain character, RLSD: RLSD changed state
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, RLSD: RLSD changed state
                WaitMask=TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
                WaitMask=RXCHAR: Any Character received, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
                WaitMask=RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
                WaitMask=RXCHAR: Any Character received, RXFLAG: Received certain character, TXEMPTY: Transmitt Queue Empty, RLSD: RLSD changed state
                WaitMask=CTS: CTS changed state, RLSD: RLSD changed state
                //416,  WaitMask=RLSD: RLSD changed state, ERR: Line status error occurred, RING: Ring signal detected
             **/
            //////////////////////////////////////////////////////////////////////////

            SetCommMask(hComm, 416);

            Opened = true;

        }

        public void Close()
        {
            //////////////////////////////////////////////////////////////////////////
            //SET THE PURGE
            PurgeComm(hComm, 10);
            PurgeComm(hComm, 5);
            PurgeComm(hComm, 10);
            PurgeComm(hComm, 5);

            if (hComm != INVALID_HANDLE_VALUE)
            {
                CloseHandle(hComm);
                Opened = false;
            }
        }

        public byte[] Read(int NumBytes)
        {
            byte[] BufBytes;
            byte[] OutBytes;
            BufBytes = new byte[NumBytes];
            if (hComm != INVALID_HANDLE_VALUE)
            {
                OVERLAPPED ovlCommPort = new OVERLAPPED();
                int BytesRead = 0;
                ReadFile(hComm, BufBytes, NumBytes, ref BytesRead, ref ovlCommPort);
                OutBytes = new byte[BytesRead];
                Array.Copy(BufBytes, OutBytes, BytesRead);
            }
            else
            {
                throw (new ApplicationException("Comm Port Not Open"));
            }
            return OutBytes;
        }

        public int Write(byte[] WriteBytes)
        {
            int BytesWritten = 0;
            if (hComm != INVALID_HANDLE_VALUE)
            {
                OVERLAPPED ovlCommPort = new OVERLAPPED();
                WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
            }
            else
            {
                throw (new ApplicationException("Comm Port Not Open"));
            }
            return BytesWritten;
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -