c++调用win32API控制打印机打印
来源:互联网 发布:手机淘宝昵称怎么修改 编辑:程序博客网 时间:2024/05/20 07:50
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函数就可以打印出 你想要打印的字符串
前提是你的打印机在本地就能打出东西来 不然我也没办法了。我测试ok的 我把它加到昨天写的socket里面 ,服务器发个数据,我这边打印出一个数据。代码如下 只是把这个函数放进去就可以了 其他的跟之前一样!
这是客户端代码,服务端代码已经贴过了,不管是c++写的,还是用php都是一样的,socket通信而已!
#include "winsock2.h"#include <iostream>#include <windows.h>#pragma comment(lib, "ws2_32.lib")using namespace std;BOOL RecvLine(SOCKET s, char* buf); //读取一行数据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,"热烈祝贺编程实例出版发行!",16); 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;}int main(int argc, char* argv[]){const int BUF_SIZE = 64;WSADATA wsd; //WSADATA变量SOCKET sHost; //服务器套接字SOCKADDR_IN servAddr; //服务器地址char buf[BUF_SIZE]; //接收数据缓冲区char bufRecv[BUF_SIZE];int retVal; //返回值//初始化套结字动态库if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){cout << "WSAStartup failed!" << endl;return -1;}//创建套接字sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(INVALID_SOCKET == sHost){cout << "socket failed!" << endl;WSACleanup();//释放套接字资源return -1;}//设置服务器地址servAddr.sin_family =AF_INET;servAddr.sin_addr.s_addr = inet_addr("139.129.15.159");servAddr.sin_port = htons((short)1234);int nServAddlen = sizeof(servAddr);//连接服务器retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));if(SOCKET_ERROR == retVal){cout << "connect failed!" <<retVal<< endl;closesocket(sHost); //关闭套接字WSACleanup(); //释放套接字资源return -1;}ZeroMemory(bufRecv, BUF_SIZE);while(true){//向服务器发送数据//ZeroMemory(buf, BUF_SIZE);//cout << " 向服务器发送数据: ";//cin >> buf;//retVal = send(sHost, buf, strlen(buf), 0);// if (SOCKET_ERROR == retVal)// {// cout << "send failed!" << endl;// closesocket(sHost); //关闭套接字// WSACleanup(); //释放套接字资源// return -1;// }//RecvLine(sHost, bufRecv); recv(sHost, bufRecv,BUF_SIZE , 0); // 接收服务器端的数据, 只接收5个字符 if(bufRecv[0] != '0') { cout << endl <<"从服务器接收数据:" << bufRecv<< endl; Print(bufRecv); } else break;}//退出closesocket(sHost); //关闭套接字WSACleanup(); //释放套接字资源return 0;}
0 0
- c++调用win32API控制打印机打印
- C#WIN32API调用
- 打印控制:连接打印机
- C#调用CodeSoft控制两台打印机打印
- js调用打印机打印
- C#调用WIN32API系列二列举局网内共享打印机
- C#调用WIN32API系列二列举局网内共享打印机
- Java直接控制打印机打印
- 浏览器控制打印机在线打印
- c++控制打印机打印demo
- Java直接控制打印机打印
- Java直接控制打印机打印
- java调用打印机打印图片
- C#调用打印机,打印图片
- js调用打印机打印网页
- C#调用打印机打印图片
- lodop 调用打印机打印条码
- Java 调用打印机打印图片
- 2G,3G的modem的调试嵌入的自己的软件中
- Spring Boot 数据响应之数据加密以及字段过滤
- linux kernel 编译内核模块代码,插入内核模块遇到的问题和解决
- 同步类CyclicBarrier整理
- 爱油科技基于SpringCloud的微服务实践
- c++调用win32API控制打印机打印
- [Python爬虫之路2]爬取百度贴吧内容
- 解决openwrt刷上后没有无线,art也刷了
- HDU2054_A==B?_字符串处理
- Hibernate中关于持久化类的三种状态
- sql 查出一张表中重复的所有记录数据
- 数据库——游标
- 网站统计中的数据收集原理及实现(有说前端如何埋点)
- JAVA动态代理模拟