C#LPT端口连接热敏打印机发送指令
2023-09-11 14:19:38 时间
class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { LptStr = l_LPT_Str; } [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int Offset; int OffSetHigh; int hEvent; } //调用DLL. [DllImport("kernel32.dll")] private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile); [DllImport("kernel32.dll")] private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, ref OVERLAPPED lpOverlapped); [DllImport("kernel32.dll")] private static extern bool CloseHandle(int hObject); private int iHandle; /// <summary> /// 打开端口 /// </summary> /// <returns></returns> public bool Open() { iHandle = CreateFile(LptStr, 0x40000000, 0, 0, 3, 0, 0).ToInt32(); // iHandle = CreateFile(LptStr, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (iHandle != -1) { return true; } else { return false; } } /// <summary> /// 打印字符串,通过调用该方法可以打印需要的字符串 /// </summary> /// <param name="Mystring"></param> /// <returns></returns> public bool Write(String Mystring) { //如果端口为打开,则提示,打开,则打印 if (iHandle != -1) { OVERLAPPED x = new OVERLAPPED(); int i = 0; //byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring); byte[] mybyte = Encoding.GetEncoding("GB2312").GetBytes(Mystring); bool b = WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x); return b; } else { throw new Exception("不能连接到打印机!"); } } /// <summary> /// 打印命令,通过参数,可以打印小票打印机的一些命令,比如换行,行间距,打印位图等。 /// </summary> /// <param name="mybyte"></param> /// <returns></returns> public bool Write(byte[] mybyte) { //如果端口为打开,则提示,打开,则打印 if (iHandle != -1) { OVERLAPPED x = new OVERLAPPED(); int i = 0; return WriteFile(iHandle, mybyte, mybyte.Length, ref i, ref x); } else { throw new Exception("不能连接到打印机!"); } } /// <summary> /// 关闭端口 /// </summary> /// <returns></returns> public bool Close() { return CloseHandle(iHandle); } }
Byte[] data1 = new byte[] { 0x1D, 0x56, 0x30 };//切纸指令 Byte[] data2 = new byte[] { 0x1B, 0x70, 0x00, 0x3C, 0xFF };//弹钱箱指令(什么鬼收银机中可以弹钱箱,我也不知道) Byte[] data3 = new byte[] { 0x1D, 0x21, 0x24, 0x24 };//字体大小36 Byte[] data4 = new byte[] { 0x1D, 0x21, 0x0C, 0x0C };//字体大小12 Byte[] data5 = new byte[] { 0x1B, 0x45, 0x01 };//字体加粗开始 Byte[] data6 = new byte[] { 0x1B, 0x45, 0x00 };//字体加粗结束 LptControl lc = new LptControl("lpt1");//端口 lc.Open(); lc.Write(data3);//打印指令byte数组 lc.Write("文字文字");//打印文字 lc.Write("\n\n\n\n"); lc.Close();
转 : https://www.cnblogs.com/rinack/p/4837993.html
相关文章
- c# 中内部类的简单介绍 C#内部类
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能
- C# 字符串的连接
- C#使用oledb连接excel运行Insert Into语句出现“操作必须使用一个可更新的查询”的解决的方法
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
- C#【必备技能篇】程序集间的引用
- C#,最大公共子序列(LCS,Longest Common Subsequences)的算法与源代码
- TwinCAT3中ModbusTCP Server和C# Client连接
- C#连接sqlServer数据库详解
- C# 字符串的连接
- CRC-16/XMODE X16+X12+X5+1 C#、C和java环境下实现
- C#引用多个接口案例教程
- 【转发】C# Entity Framework框架 Code First 模式 连接 SQLAccessSQLite (组合式)
- c#截取两个指定字符串中间的字符串(转载)
- win7 C# 利用windows自带语音类库读书 spvoice,电脑端 读书-摘自网络
- C# virtual修饰符
- C#Color对象的使用介绍及颜色对照表
- [转]C# winform窗体(cs文件) .Designer.cs、.resx 文件分离出来 同级问题
- C# 正则表达式
- C# Lambda表达式
- 【C#】使用MySql.Data.dll连接MySQL数据库