Windows核心编程调用打印机
这是我在工作中实现的代码,可以获取默认打印机并打印:
失败返回1,成功返回0
这个函数是用来调用默认打印机的,其实原理很简单就是用GetProfileStringA获取win.ini里的配置信息,得到默认打印机的名字
然后调用CreateDCA、StartDoc、StartPage、TextOutA、EndPage、EndDoc打印机全家桶API函数开始打印
CreateDCA函数是创建一个DC绘图环境,为打印创建一个绘图环境
StartDoc 开始绘图
StartPage 通知打印机开启一个打印作业
SaveDC 保存打印机设备的状态,这一步防止别人调用打印机,是保存打印机状态到设备描述表(设备上下文)里面存储了物理设备相关的信息,当程序与硬件交互时会获取设备上下文状态,告诉windows这个机器是处于什么状态,防止同一系统下别的程序调用这个打印机。
TextOutA 绘制图像
ResetoreDC 恢复打印机状态
EndPage 结束打印
EndDC 结束绘图
#include <Windows.h>
int Print(char str[]) {char szprinter[80];char* szDevice, * szDriver, * szOutput;HDC hdcprint; // 定义一个设备环境句柄//定义一个打印作业static DOCINFO di = { sizeof(DOCINFO),L"printer",NULL };GetProfileStringA("windows", "device", ",,,", szprinter, 80);szDevice = strtok(szprinter, ",");szDriver = strtok(NULL, ",");szOutput = strtok(NULL, ",");if (szDevice && szDriver && szOutput) {if ((hdcprint = CreateDCA(szDriver, szDevice, szOutput, NULL)) != 0) {if (StartDoc(hdcprint, &di) > 0) //开始执行一个打印作业{StartPage(hdcprint); //打印机走纸,开始打印SaveDC(hdcprint); //保存打印机设备句柄 TextOutA(hdcprint, 1, 1, str, strlen(str));RestoreDC(hdcprint, -1); //恢复打印机设备句柄EndPage(hdcprint); //打印机停纸,停止打印EndDoc(hdcprint); //结束一个打印作业// MessageBox("打印完毕!","提示",MB_ICONINFORMATION);}// 用API函数DeleteDC销毁一个打印机设备句柄DeleteDC(hdcprint);}else {// MessageBox("没有默认打印机,或者没有安装打印机!");return 1;}}return 0;
}
代码非常简单,你也可以稍微修改一下代码就可以变成指定打印机设备打印
将szprinter指定一个打印机全名就可以了。
当然你也可以指定一个打印机为默认打印机:
#include <windows.h>int set_print(){char szPrinterName[1024] = { "xxxx" };BOOL ret = SetDefaultPrinterA(szPrinterName);if (ret == FALSE)printf("设置打印机失败");elseprintf("设置打印机成功");
}
遍历打印机驱动:
这段代码可以遍历当前本机上所有的打印机与描述
#include <windows.h>
int get_print(){DWORD dwFlags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL;LPPRINTER_INFO_2 pPrinters;DWORD cbPrinters;DWORD cReturned, i;char buf[256];EnumPrinters(dwFlags, NULL, 2, NULL, 0, &cbPrinters,&cReturned);if (!(pPrinters = (LPPRINTER_INFO_2)LocalAlloc(LPTR, cbPrinters + 4))){printf("LocalAlloc error\n");}if (!EnumPrinters(dwFlags, NULL, 2, (LPBYTE)pPrinters,cbPrinters, &cbPrinters, &cReturned)){printf("EnumPrinters error\n");}if (cReturned > 0){for (i = 0; i < cReturned; i++){ strcpy(buf, (pPrinters + i)->pPrinterName);strcat(buf, ";");strcat(buf, (pPrinters + i)->pPortName);strcat(buf, ";");strcat(buf, (pPrinters + i)->pDriverName);printf("print:%s\n", buf);memset(buf, 0, 256);}}else {printf("no print!\n");}
}
Windows核心编程调用打印机相关推荐
- C++Windows核心编程读书笔记(转)
http://www.makaidong.com/(马开东博客) 这篇笔记是我在读<windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的 ...
- [C++]《Windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...
- 《windows核心编程系列》十八谈谈windows钩子
windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...
- chHANDLE_DLGMSG(windows核心编程)讲解
看完<Windows程序设计>后开始看<windows核心编程>, 结果看第一个案例的时候就很惊人的发现,Jeffery大牛的代码很深奥.乍一看好像没有包含<window ...
- 窗口消息——Windows核心编程学习手札之二十六
窗口消息 --Windows核心编程学习手札之二十六 Windows允许一个进程至多建立10000个不同类型的用户对象(user object):图符.光标.窗口类.菜单.加速键表等,当一个线程调用一 ...
- 未处理异常和C++异常——Windows核心编程学习手札之二十五
未处理异常和C++异常 --Windows核心编程学习手札之二十五 当一个异常过滤器返回EXCEPTION_CONTINUE_SEARCH标识符时是告诉系统继续上溯调用树,寻找另外的异常过滤器,但当每 ...
- 异常处理程序和软件异常——Windows核心编程学习手札之二十四
异常处理程序和软件异常 --Windows核心编程学习手札之二十四 CPU负责捕捉无效内存访问和用0除一个数值这种错误,并相应引发一个异常作为对错误的反应,CPU引发的异常称为硬件异常(hardwar ...
- 结束处理程序——Windows核心编程学习手札之二十三
结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...
最新文章
- 安卓手机也能跑YOLOv5了!
- 覆盖索引与联合索引_什么是覆盖索引?
- [Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效
- 15、sql语句集,Linux 下PHP查询mysql
- DevExpress GridControl功能总结
- dom4j-cookbook
- 最有价值的100句话
- 【LeetCode笔记】215. 数组中的第K个最大元素(Java、快排、堆排、并发快排)
- 【CSS3】制作带光晕的网页“Button“
- Zabbix检测Mysql的主从同步
- linux下软件的卸载,Linux下各种格式软件的安装及卸载方法
- 计算机课评课用语,【数学评课50条】_评课常用语50条
- Fiddler自动回复器伪造回复
- 全国计算机专业大学排名全部,全国计算机专业大学排名汇总
- 坚持定投3年,我赚了多少钱?
- 一个web页面的访问的过程
- NVIDIA CUDA初级教程(P2-P3)CPU体系架构概述、并行程序设计概述
- 利用VBA在Word中排出漂亮的代码
- python回文数判定_python如何写一个函数判断回文数?
- spark大小表join操作
热门文章
- idea中git替换,推送到新的github或者gitlab上面
- ubuntu 安装 virt-manager 虚拟机
- 为什么mysql查询结果有前缀_字符串的公共前缀对Mysql B+树查询影响回溯分析
- c++ 海战棋_编程入门须知:都说零基础不好学编程,那么什么是编程基础?
- python实时监控_python实时监控cpu小工具
- fiddler弱网测试_用fiddler实现弱网测试
- 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
- 苹果CMS V10 播放记录_苹果cms采集后无法播放怎么解决?
- 跟驰理论 matlab,[自然科学]第4章 跟驰理论.ppt
- C# ashx生成的验证码