Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366743
  • 博文数量: 48
  • 博客积分: 1084
  • 博客等级: 少尉
  • 技术积分: 496
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 14:09
文章分类

全部博文(48)

文章存档

2014年(2)

2013年(3)

2012年(13)

2011年(24)

2010年(6)

分类: WINDOWS

2011-03-22 10:06:29

  下面是一个将数据直接发送到打印机的示例:
    记得在文件中加上#include winspool.h

    bool Print(char* szPrinterName, char* szBuffer)// szBuffer是我们希望发送到打印机的数据缓冲
    {
    HANDLE hPrinter; //打印机句柄
    int iLen = strlen(szBuffer);// 发送数据的长度
    DWord dwWritten; // 已经向打印机写了多少

    if(OpenPrinter(szPrinterName, &hPrinter, NULL))
    //Open打印机并赋给一个句柄(已经保存在hPrinter)
    {
    DOC_INFO_1 Info;//文档信息
    memset(&Info, 0, sizeof(Info));
    Info.pDocName = "My PrintJob";
    //文档名(which is shown in the PrintManager)
    Info.pOutputFile = NULL;
    //不须要向一个文件写,设为NULL
    Info.pDatatype = "RAW";
    //数据以RAW格式发送(Win9x和WinNT都支持RAW和EMF格式,WinNT还支持TEXT格式

    if(!StartDocPrinter(hPrinter, 1, (LPBYTE)&Info))//文档开始
    return false;

    // 告诉打印机开始新页
    StartPagePrinter(hPrinter);

    // 向打印机写数据
    if(!WritePrinter(hPrinter, szBuffer, iLen, &dwWritten))
    {
    //当发送数据时出现错误
    //用最后的错误指出发生了什么错误
    }
    EndPagePrinter(hPrinter);//告诉打印机已经完成当前页
    if(!EndDocPrinter(hPrinter))//文档结束
    return false;
    ClosePrinter(hPrinter);//关闭打印机
    return true;
    }
    else
    {
    return false;
    }
    }

    假如你的打印机直接与计算机相连(LPT1-LPT3)或者影射为网络打印机,那你就可以直接用fopen函数来实现。
    eg. fopen("lpt1", "wt") 或 fopen("", "wt")

阅读(7900) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~