【转载】c++调用win32API控制打印机打印

发布时间 2023-08-16 18:03:35作者: jiftle

原文:https://blog.csdn.net/cheng448208985/article/details/55510687
win32实现将原始数据发送给打印机

1、调用OpenPrinter()打开打印机,获取打印机句柄。

2、初始化DOCINFO打印机结构体。

3、调用StartDocPrinter()表明应用程序准备发送文档数据给打印机。

4、调用StartPagePrinter()表明程序准备发送一个新的打印页给打印机。

5、调用WritePrinter()发送原始数据给打印机。

6、调用EndpagePrinter()表明打印页发送完毕。

7、调用EndDocPrinter()表明文档发送完毕。

8、调用ClosePrinter()关闭打印机,释放资源。

通过上面步骤即可实现将原始打印数据发送给打印机。

windows console 项目
复制代码

include <windows.h>

int Print(char str[]){
char szprinter[80];
char szDevice,szDriver,*szOutput;
HDC hdcprint; // 定义一个设备环境句柄
//定义一个打印作业
static DOCINFO di={sizeof(DOCINFO),"printer",NULL};
GetProfileString("windows","device",",,,",szprinter,80);
szDevice=strtok(szprinter,",");
szDriver=strtok(NULL,",");
szOutput=strtok(NULL,",");
if(szDevice&&szDriver&&szOutput){if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0){
if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业
{

                StartPage(hdcprint); //打印机走纸,开始打印
                SaveDC(hdcprint); //保存打印机设备句柄  
                TextOut(hdcprint,1,1,str,strlen(str));
                RestoreDC(hdcprint,-1); //恢复打印机设备句柄
                EndPage(hdcprint); //打印机停纸,停止打印
                EndDoc(hdcprint); //结束一个打印作业
        //        MessageBox("打印完毕!","提示",MB_ICONINFORMATION);
            }
            // 用API函数DeleteDC销毁一个打印机设备句柄
            DeleteDC(hdcprint);
    }
    else{
        //    MessageBox("没有默认打印机,或者没有安装打印机!");
            return 0;
        }
    }
return 1;

}

复制代码

调用上面的Print函数就可以打印出 你想要打印的字符串