首页 > 编程语言 >【转载】c++调用win32API控制打印机打印

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

时间:2023-08-16 18:14:10浏览次数:49  
标签:打印机 调用 句柄 打印 c++ hdcprint szDevice win32API

原文: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函数就可以打印出 你想要打印的字符串

标签:打印机,调用,句柄,打印,c++,hdcprint,szDevice,win32API
From: https://www.cnblogs.com/jiftle/p/17635841.html

相关文章

  • C++ Cast And Go Cast
    C++Astatic_castcanbeusedtoexplicitlyconvertbetweenrelatedpointertypes,suchasvoid*anddouble*reinterpret_castcancastbetweenunrelatedtypes,suchasintanddouble*.const_castcan“castawayconst.”Forexample:int*pi=static_ca......
  • c/c++参数入栈顺序和参数计算顺序
    如果大家细心的话应该知道c/c++语言函数参数入栈顺序为从右至左,那么为什么这样呢?来看看两个知识点:参数的计算顺序与压栈顺序。参数入栈顺序c/c++中规定了函数参数的压栈顺序是从右至左,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。参......
  • C++类对象的创建方式
    1、默认构造函数创建类对象在C++中,当我们定义一个类时,如果没有明确地为类编写构造函数,编译器会为我们提供一个默认的构造函数。这就是我们所说的默认构造函数。默认构造函数没有任何参数,但是它会执行一些基本的任务,比如为类中的成员变量分配内存。2、拷贝构造函数创建类对象拷......
  • 6.1 C++ STL 序列映射容器
    Map/Multimap映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值。Map中的所有元素都会根据元素的键值自动排序,所有的元素都是一个Pair同时拥有实值和键......
  • 7.1 C++ STL 非变易查找算法
    C++STL中的非变易算法(Non-modifyingAlgorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理、查找、计算等操作,并通过迭代器实现了对序列元素的遍历与访问。由于迭代器与算法是解耦的,因此非变易算法可以广泛地应......
  • 8.1 C++ STL 变易拷贝算法
    C++STL中的变易算法(ModifyingAlgorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入、删除、替换等操作。这些算法同样定义在头文件<algorithm>中,它们允许在容器之间进行元素的复制、拷贝、移动等操作,从而可以方便地对容器进行修改和重组。主要包括以下......
  • 7.1 C++ STL 非变易查找算法
    C++STL中的非变易算法(Non-modifyingAlgorithms)是指那些不会修改容器内容的算法,是C++提供的一组模板函数,该系列函数不会修改原序列中的数据,而是对数据进行处理、查找、计算等操作,并通过迭代器实现了对序列元素的遍历与访问。由于迭代器与算法是解耦的,因此非变易算法可以广泛地应......
  • 8.1 C++ STL 变易拷贝算法
    C++STL中的变易算法(ModifyingAlgorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入、删除、替换等操作。这些算法同样定义在头文件<algorithm>中,它们允许在容器之间进行元素的复制、拷贝、移动等操作,从而可以方便地对容器进行修改和重组。主要包括以下......
  • 6.1 C++ STL 序列映射容器
    Map/Multimap映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值。Map中的所有元素都会根据元素的键值自动排序,所有的元素都是一个Pair同时拥有实值和键......
  • c++学习知识
    1.c++11的各种新特性2.四件套,也就是各种硬件知识3.TCP编程4.Linux的各种指令5.编写shell脚本和python脚本......