通过驱动向打印机发送一段(ESC)控制指令
这个功能看起来挺奇葩的, 写这个是因为有客户在使用驱动连接票据打印机, 但是又要开钱箱, 驱动里只能每张单据都开钱箱, 而这个打印机又不是只打印结帐单
所以就需要用软件控制打印机开钱箱
票据打印机一般都支持ESC/POS指令, 所以就出现了如下代码, 通过这个函数可以吧ESC/POS指令里的开钱箱指令发送给打印机控制开钱箱
同样, 也可以发送别的什么东西, 比如响响蜂鸣器之类的
哦 补充下, 这个代码里使用的是默认打印机, 当然稍微改动下, 就可以先弹出个打印机列表, 然后选择打印机传进去, 这样就可以控制任意打印机了
OpenPrinter(PChar(Printer.Printers[0]), nD, nPPD);
uses
WinSpool, Printers; function WritePrtDataForDriver(AData: string; var AErrCode: Byte): Boolean;
var
nD: Cardinal;
nPPD: PPrinterDefaults;
nDocInfo: DOC_INFO_;
nDataLength: DWORD;
nSize: DWORD;
nReturn: Boolean;
begin
Result := False; AErrCode := ;
nD := INVALID_HANDLE_VALUE;
nPPD := New(PPrinterDefaults);
try
with nPPD^ do
begin
DesiredAccess := PRINTER_ACCESS_USE;
pDatatype := nil;
pDevMode := nil;
end;
OpenPrinter(PChar(Printer.Printers[]), nD, nPPD);
finally
Dispose(nPPD);
end;
if nD = INVALID_HANDLE_VALUE then
Exit; with nDocInfo do
begin
pDocName := 'Print Document';
pOutputFile := nil;
pDatatype := 'RAW';
end;
AErrCode := ;
if StartDocPrinter(nD, , @nDocInfo) <= then
Exit;
AErrCode := ;
if not StartPagePrinter(nD) then
Exit;
AErrCode := ;
nDataLength := Length(AData);
nReturn := WritePrinter(nD, PChar(AData), nDataLength, nSize);
if (not nReturn) or (nSize <> nDataLength) then
Exit;
AErrCode := ;
if not EndPagePrinter(nD) then
Exit;
AErrCode := ;
if not EndDocPrinter(nD) then
Exit; AErrCode := ;
if not ClosePrinter(nD) then
Exit; AErrCode := ;
Result := True;
end;
附: 获取驱动打印机状态:
var
i: Integer;
nPRH: THandle;
PrinterName:String;
nBuff: array[..] of Char;
nSize: DWord;
pInfo: PPrinterInfo2;
begin
Memo1.Lines.Clear;
for i := to Printer.Printers.Count - do
begin
if OpenPrinter(PChar(Printer.Printers[i]), nPRH,nil) then
begin
if GetPrinter(nPRH, , @nBuff, SizeOf(nBuff), @nSize) then
begin
pInfo:=PPrinterInfo2(@nBuff);
Memo1.Lines.Add('Device := ' + Printer.Printers[i]);
Memo1.Lines.Add('Status := ' + inttostr(pInfo.Status));
Memo1.Lines.Add('');
end;
end;
ClosePrinter(nPRH);
end;
end;
通过驱动向打印机发送一段(ESC)控制指令的更多相关文章
- TCP连接建立系列 — 客户端发送SYN段
主要内容:客户端调用connect()时的TCP层实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STRE ...
- TCP连接建立系列 — 服务端发送SYNACK段
本文主要分析:服务器端如何构造和发送SYNACK段. 内核版本:3.6 Author:zhangskd @ csdn blog 发送入口 tcp_v4_send_synack()用于发送SYNACK段 ...
- c# 向驱动打印机发送命令打开钱箱
引用的dll 链接: https://pan.baidu.com/s/1MjwmfvBCPTBq1QNapKzDmg 提取码: 9wuf [DllImport("Drawcash.dll&q ...
- Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送
laravel5.5 邮件驱动 Laravel 支持多种邮件驱动,包括 smtp.Mailgun.Maildrill.Amazon SES.mail 和 sendmail.Mailgun . Mail ...
- 【转】C#使用ESC指令控制POS打印机打印小票
.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos ...
- C#使用ESC指令控制POS打印机打印小票
1.前言 C#打印小票可以与普通打印机一样,调用PrintDocument实现.也可以发送标注你的ESC指令实现.由于 调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的po ...
- usb口打印机的指令打印和驱动打印
打印机简介:是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上. 打印机类型:激光打印机.喷墨打印机.针式打印机.热敏打印机等. 计算机和打印机之间的连接方式:usb口.串口.并口.网口.蓝 ...
- ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行
众所周知,我们在ADO.NET中可以使用NuGet包System.Data.SqlClient来操作SQL Server,并且ADO.NET是支持向SQL Server发送包含多个SQL语句的批处理脚 ...
- XP中如何配置和共享打印机
Win XP中如何配置和共享打印机 一.配置 打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择" ...
随机推荐
- win7下loadrunner创建mysql数据库参数化问题解决
问题现象: 安装mysql数据源驱动后,lr创建mysql驱动程序列表没有安装的驱动程序: 安装完mysql ODBC数据源后 2.在控制面板-数据源(ODBC) 3.创建mysql数据源: 4.从l ...
- 判断 Gym 100502K Train Passengers
题目传送门 /* 题意:几个判断,车上的人不能 <0 或 > C:车上初始和结束都不能有人在 (为0):车上满员时才有等候的人 水题:难点在于读懂题目意思,状态不佳,一直没搞懂意思,在这题 ...
- css构造块级元素
css 1. 宽高width:数值;height:数值;也可用百分比!长高的设置不会被后代继承2. 背景(1)背景颜色background-color:颜色值;元素的背景颜色默认为transparen ...
- Counting Squares[HDU1264]
Counting Squares Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- ! cocos2d sprintf的问题
char dong[100]; sprintf(dong,"%s","dongshen"); CCLOG(dong); 以上正确 char dong[100]; ...
- BZOJ4129: Haruna’s Breakfast
Description Haruna每天都会给提督做早餐! 这天她发现早饭的食材被调皮的 Shimakaze放到了一棵 树上,每个结点都有一样食材,Shimakaze要考验一下她. 每个食材都有一个美 ...
- 学习了ZKW费用流
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...
- Html A标签中 href 和 onclick 同时使用的问题 优先级别
我们在制作网页的时候用得最多的就是 A 标签 超连接 但有时候需要在 A 里同时用到 href 和 onclick属性 下面我们先来分析一下 ,在不同的浏览器下有不同的效果 1 顺序 ie 6 : h ...
- NSString 处理技巧:分割字符串
摘要 string类型是objective-c中用的最多的类型之一,有时会出现字符串中有我们不想要的字符. 如 "hello world"中的空格,或是"hello/wo ...
- CentOS网卡配置文件
[root@xaiofan ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0TYPE=EthernetONBOOT=yesNM ...