软件编程
位置:首页>> 软件编程>> C#编程>> C#编程实现向并口设备发送指令、获取并口设备的状态

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

作者:junjie  发布时间:2023-02-02 02:56:39 

标签: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);
       }
     }
   }
 }
}

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com