当前位置: 代码迷 >> C# >> C#向并口装置发送指令以获取并口设备的状态
  详细解决方案

C#向并口装置发送指令以获取并口设备的状态

热度:76   发布时间:2016-05-05 03:28:44.0
C#向并口设备发送指令以获取并口设备的状态
using System;using System.Diagnostics;using System.Runtime.InteropServices;using System.Text;using System.Windows.Forms; namespace ParallelPort{    public partial class Form1 : Form    {        const uint GENERIC_READ = 0x80000000;        const uint GENERIC_WRITE = 0x40000000;        const uint FILE_ATTRIBUTE_NORMAL = 0x80;         #region win32 API        [DllImport("kernel32.dll ")]        private static extern int CreateFile(            string lpFileName,            uint dwDesiredAccess,            int dwShareMode,            int lpSecurityAttributes,            int dwCreationDisposition,            uint dwFlagsAndAttributes,            int hTemplateFile           );         [DllImport("kernel32.dll ")]        private static extern bool WriteFile(            int hFile,            byte[] lpBuffer,            int nNumberOfBytesToWrite,            ref int lpNumberOfBytesWritten,            int lpOverlapped           );         [DllImport("kernel32.dll ")]        private static extern bool DefineDosDevice(        int dwFlags,        string lpDeviceName,        string lpTargetPath);         [DllImport("kernel32.dll ")]        private static extern bool CloseHandle(            int hObject           );        [DllImport("kernel32.dll ")]        private static extern bool ReadFile(            int hFile,            byte[] lpBuffer,            int nNumberOfBytesToRead,            ref int lpNumberOfBytesRead,            int lpOverlapped           );       #endregion         public Form1()        {           InitializeComponent();        }         private void button1_Click(object sender, EventArgs e)        {            int iHandle = -1;            try            {               int i = 0;               //创建实例               DefineDosDevice(0x00000001, "LptPortName",@"\Device\Parallel0");               iHandle = CreateFile(@"\\.\LptPortName",GENERIC_READ | GENERIC_WRITE, 0, 0, 3, FILE_ATTRIBUTE_NORMAL, 0);               if (iHandle !=-1)               {                   byte[] mybyte = new byte[3]{ 0x12, 0x14, 0x14 };//要发送的命令(16进制)                   WriteFile(iHandle, mybyte, mybyte.Length, ref i, 0);                   byte[] mybyte1 = new byte[3];                   string content = String.Empty;                   int j = 0;                   ReadFile(iHandle, mybyte1, 3, ref j,  0);                   if (mybyte1 != null)                   {                        foreach(var tempByte in mybyte1)                        {                            content += tempByte.ToString();                        }                   }                                                  MessageBox.Show(content);//获取的状态值               }               else               {                   MessageBox.Show("创建文件失败!");               }            }            catch(Exception ex)            {               MessageBox.Show(ex.Message);            }            finally            {               if (iHandle > 0)               {                   CloseHandle(iHandle);               }            }        }    }} 


 

  相关解决方案