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

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace PrinterMonitor
{
    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,
            intd wShareMode,
            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, EventArgse)
        {
            intiHandle = -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, refi, 0);
                   byte[] mybyte1 = new byte[3];
                   string content="";
                   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);
               }
            }
        }
    }
}
时间: 2025-01-06 18:32:15

C#向并口设备发送指令以获取并口设备的状态的相关文章

Xshell同时向多个会话发送指令的方法

我们平时使用XSHELL.SecureCRT.putty等ssh连接工具连接到远程主机,每次输入指令都是在单一会话窗口,如果有很多台会话,需要同时输入同样的指令,我们就不用一一输入,浪费时间和精力.可以发掘更方便的方法,下面就介绍一下Xshell同时向多个会话发送指令的设置方法. 使用版本为:Xshell 4.0   具体步骤如下: 1.打开2个会话 2.选择菜单栏:查看――撰写栏,勾选前面的方框选中. 3.勾选后,在Xshell窗口的最下方,出现对话框,在此输入命令,可以选择到当前的会话,也可

【Android开发—智能家居系列】(四):UDP通信发送指令

思路回顾 [1]手机连接WIFI模块 [2]UDP通信对WIFI模块发送指令,以和WIFI模块保持连接状态 [3]UDP通信对WIFI模块发送指令,让其搜索可用的无线网,返回WIFI列表 [4]发送指令,让WIFI模块接入指定路由 [5]手机连接路由 [6]发送指令,获得WIFI模块的动态IP地址 UDP通信线程类 package com.jczb.smartlife.common; import java.io.IOException; import java.net.DatagramPack

9.PMAC上位机-上位机发送指令

通常我们说PC控制其他硬件工作,指的是PC给相应的硬件发送指令来控制对应硬件.同时在发送完指令后可能会接受到相对应的反馈消息,告诉PC当前硬件的状态和参数等数据,这就是常见的PC和硬件通信.PMAC已经帮我们封装好了这通信过程,直接调用相关函数即可,这里讲通过上位机给PMAC发送指令控制电机运动或设置参数或返回当前指定参数值等. PMAC提供PmacGetResponse和PmacGetResponseEX给PMAC发送指令.这一过程非常类似在Terminal中我们手动给PMAC发送指令,这里两

CC2541 设备发送数据给手机

CC2541 与手机连接后,手机有两种方法获得设备的数据: 1. 设备用 Indicate 或 Notify 方式主动发送属于给手机,这里要调用 Indicate 或 Notify 程序发送数据 2. 手机主动要求设备发送数据,调用 bloodPressure_ReadAttrCB 函数,此时不需要调用 Indicate 或 Notify 程序,只需要调用 osal_memcpy 就可以了 版权声明:本文为博主原创文章,未经博主允许不得转载.

关于无线设备RED指令

无线设备RED指令 随着互联网越来越发达,,酝酿已久的无线电设备指令(RED)将取代R&TTE指令即将正式实施.2014年5月22日,无线电设备指令(The Radio Equipment Directive,RED)2014/53/EU正式在欧盟官方公报(OJ)上公布,并于2014年6月12日生效.该指令已取代无线电与电信终端设备指令(R&TTE指令),2016年6月12日之前,成员国应将该指令转化为成员国法律,原R&TTE指令(1999/5/EC)也随之作废.2016年6月13

LINUX设备驱动程序笔记(一)设备驱动程序简介

<一>:设备驱动程序的作用 从一个角度看,设备驱动程序的作用在于提供机制,而不是策略.在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略.因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序. 从另一个角度来看驱动程序,它还可以看作是应用程序和实际设备之间的一个软件层. 总的来说,驱动程序设计主要还是综合考虑下面三个方面的因素:提供给用户尽量多的选项.编写驱动程序要占用的时间以及尽量保持

设备与驱动的关系以及设备号、设备文件

Linux设备分类Linux下的设备通常分为三类,字符设备,块设备和网络设备. 字符设备 一个字符设备是一种字节流设备,对设备的存取只能按顺序按字节的存取而不能随机访问,字符设备没有请求缓冲区,所有的访问请求都是按顺序执行的.Linux下的大多设备都是字符设备.应用程序是通过字符设备节点来访问字符设备的.设备节点一般都由mknod命令都创建在/dev目录下,下面的例子显示了串口设备的设备节点.字符设备文件的第一个标志是前面的“c”标志. root#ls -l /dev/ttyS[0-3]crw-

当多台设备连接时,选择其中设备ADB调试

1. 通过adb devices命令获取所有online设备的serial number. C:\Users\zhaopeng>adb devices List of devices attached b7b86f9 device localhost:4444  device 2. 通过adb -s <serial number> cmd向设备发送adb命令. 比如:运行命令shell. C:\Users\zhaopeng>adb -s b7b86f9 shell

LINUX设备驱动程序笔记(一)设备驱动程序简单介绍

<一>:设备驱动程序的作用 从一个角度看,设备驱动程序的作用在于提供机制,而不是策略. 在编写驱动程序时,程序猿应该特别注意以下这个基本概念:编写訪问硬件的内核代码时,不要给用户强加不论什么特定策略.由于不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题.而将如何使用硬件的问题留给上层应用程序. 从还有一个角度来看驱动程序.它还能够看作是应用程序和实际设备之间的一个软件层. 总的来说,驱动程序设计主要还是综合考虑以下三个方面的因素:提供给用户尽量多的选项.编写驱动程序要占用的时间以及