Delphi 10.2下如何给USB/蓝牙Xprinter XP-58H发送指令打开POS钱箱
解决USB/蓝牙连接的Xprinter XP-58H打开钱箱问题
针对你的情况,以下几种可行方法可以尝试:
方法1:用WinAPI直接向打印设备发送二进制指令
AssignPrn会把输出当作文本处理,可能无法正确传递ESC/POS控制指令。改用WinAPI的打印函数直接发送二进制指令,示例代码如下:
uses Winapi.Windows, Winapi.Printers; procedure SendEscPosToPrinter(const PrinterName: string; const Data: TBytes); var hPrinter: THandle; DocInfo: TDocInfoA; BytesWritten: DWORD; begin if not OpenPrinter(PChar(PrinterName), hPrinter, nil) then Exit; try ZeroMemory(@DocInfo, SizeOf(DocInfo)); DocInfo.cbSize := SizeOf(DocInfo); DocInfo.pDocName := 'Open Cash Drawer'; if StartDocPrinter(hPrinter, 1, @DocInfo) > 0 then begin if StartPagePrinter(hPrinter) then begin WritePrinter(hPrinter, @Data[0], Length(Data), BytesWritten); EndPagePrinter(hPrinter); end; EndDocPrinter(hPrinter); end; finally ClosePrinter(hPrinter); end; end; // 调用示例 procedure TForm1.ButtonOpenDrawerClick(Sender: TObject); var Cmd: TBytes; begin // XP-58H的钱箱指令,部分型号需将第二个参数改为#1 Cmd := TEncoding.ASCII.GetBytes(#27#112#0#150#250); SendEscPosToPrinter(Printer.Printers[Printer.PrinterIndex], Cmd); end;
方法2:调整ESC/POS指令参数
部分Xprinter型号的钱箱触发指令参数有差异,你可以尝试替换指令为:#27#112#1#150#250(将第三个字符从#0改为#1),这个参数对应触发钱箱的第二个驱动。
方法3:使用厂商官方SDK
Xprinter提供了专属开发SDK,里面包含现成的钱箱控制接口,直接调用SDK函数可以避免指令兼容性问题,你可以去厂商官网下载对应版本的SDK集成到Delphi项目中。
内容的提问来源于stack exchange,提问作者XBasic3000
相关产品推荐
相关产品推荐

