zoukankan      html  css  js  c++  java
  • 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",@"DeviceParallel0");
                   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);
                   }
                }
            }
        }
    }
    
     
    


     

  • 相关阅读:
    noip2015运输计划
    bzoj3595 方伯伯的oj
    noip模拟赛 #3
    圆方树
    AtCoder AGC #4 Virtual Participation
    noip模拟赛 #2
    AtCoder AGC #3 Virtual Participation
    UNR #1 火车管理
    noip模拟赛
    AtCoder AGC #2 Virtual Participation
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5102433.html
Copyright © 2011-2022 走看看