C#向并口设备发送指令以获取并口设备的状态
2024-10-10 19:21:13
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);
}
}
}
}
}
最新文章
- (AS3)关于arguments
- 学习WPF——WPF布局——了解布局容器
- WritePrivateProfileString()
- 第2章 linux文件系统
- [Android]AndroidDesign中ActionBar探究1
- MySQLdb模块安装-win环境
- unity3d中的http通信 二
- display 属性
- iOS计算文本高度
- ASPxGridView后台获取edit、delete、选择框等按钮。
- linux下安装node.js
- oracle_恢复流程图
- Bower使用教程(限window)
- HTTP的学习
- 【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测
- Java基础总结--多线程总结1
- Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本
- python 常见算法
- 利用OpenStreetMap(OSM)数据搭建一个地图服务
- 如何取消Visual Studio Browser Link
热门文章
- python进阶十_正則表達式(一)
- spring mvc 和 jstl
- Node.js and Forever “exited with code: 0”
- iOS开发--in house发布和安装(ipa重新签名)
- Winform - 全屏显示
- java 基于JDK中的源码总结下String二
- 找到程序真正的入口(使用IDE追踪)
- socket为send和recv设置超时时间
- Poj 3771 hdu 3405
- .bash_profile与.bashrc和.profile的区分概念