注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

海宏软件的个人主页

用机器解放人的双手

 
 
 

日志

 
 

海宏软件原创:给USB口的打印机发ESC转义指令开钱箱  

2010-09-28 10:43:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

海宏软件原创:给USB口的打印机发ESC转义指令开钱箱,转载请注明

var sMoneyBoxOpenCommand='海宏软件,不同的打印机,指令不同';

TOutBufPassThrough = record       //调用windows.extEscape可以直接用extEscape(handle, PASSTHROUGH, sizeOf(outBuf), @outBuf, 0, nil)向设备发送esc命令
      nDataLen:word;
      sEscData:array [0..1024] of char;
    end;

var prt:TPrinter;     esc:TOutBufPassThrough;

try                                        //驱动开
        prt:=printers.Printer;
        prt.beginDoc;               //没办法,必须的
        esc.nDataLen:=length(sMoneyBoxOpenCommand);
        strpCopy(esc.sEscData, sMoneyBoxOpenCommand);
        windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil);  ////PASSTHROUGH:允许程序直接发送数据到设备
        prt.endDoc;       //这里会导致打印机走一小段纸,也没找到好办法
    except
        on x:Exception do ;
    end;

 

另外,可以用printers.assignprt直接向USB口打印机写字符,但是lpt口的可以直接发esc指令开钱箱,usb口的却怎么也不行。

----------------------------------------------------------方式2------------------------------------------------------------

//海宏软件原创,转载请注明
//输出RAW字符串到打印机
function WriteRawStringToPrinter(PrinterName:String; pBuf:pointer; nBufLen:integer):boolean;
var Handle: THandle;     
    N: DWORD;
    DocInfo1: TDocInfo1;
begin
    result:=false;
    if not OpenPrinter(PChar(PrinterName), Handle, nil) then begin
        raise exception.create('打开打印机出错(OpenPrinter-Error):' + IntToStr(GetLastError));
        Exit;
    end;
    with DocInfo1 do begin
        pDocName := PChar('海宏软件');  //在打印列表中显示的打印内容
        pOutputFile := nil;
        pDataType := 'RAW';             //关键,数据类型必须是RAW,这样打印机通过驱动程序才能识别ZPL语言
    end;
    //打印输出
    try
        //开始
        StartDocPrinter(Handle, 1, @DocInfo1);        //开始
        StartPagePrinter(Handle);                     //页
        WritePrinter(Handle, pBuf, nBufLen, N);       //写打印机
        EndPagePrinter(Handle);                       //完成
        EndDocPrinter(Handle);                        //完成文档
        //完成
        result:=true;
    finally
        ClosePrinter(Handle);                         //关闭打印机
    end;
end;
//
function WriteRawStringToPrinter(PrinterName:String; S:String):boolean;
begin
    result:=WriteRawStringToPrinter(printerName, PChar(s), length(s));
end;
//获取默认打印机名字
function GetDefaultPrinter:String;
var prnName: array[0..79] of Char;
begin
    GetProfileString('windows', 'device', '', prnName, 79);
    Result := trim( Copy(prnName, 1, Pos(',', prnName) - 1) );
end;

//直接向USB打印机输出开钱箱的命令
WriteRawStringToPrinter('POS58', sMoneyBoxOpenCommand);

  评论这张
 
阅读(3431)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017