首页 > 编程 > C# > 正文

C#编程实现向并口设备发送指令、获取并口设备的状态

2020-01-24 01:43:23
字体:
来源:转载
供稿:网友
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);        }      }    }  }} 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表