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;
} 

c++调用win32API控制打印机打印相关推荐

  1. 调用浏览器的打印方法打印页面内容

    2018-08-30 直接调用浏览器的打印方法 1.打印按钮 <a href="#" target="_self" οnclick="print ...

  2. C#调用TSC条码打印机打印二维码(转)

    #region 调用TSC打印机打印/// <summary>/// 调用TSC打印机打印/// </summary>/// <param name="titl ...

  3. 调用PDF的打印命令

    调用PDF的打印命令,但是这种情况下是调用得服务器端的打印机环境,也就特定环境下能用. FileOutputStream fosw = new FileOutputStream(new File(&q ...

  4. Linux Centos 7 实现java控制打印机打印文件**

    Linux Centos 7 实现java控制打印机打印文件 设备:Hp LaserJet Pro MFP M126nw 打印机 操作系统: Centos7 yum源:163Centos7 cups版 ...

  5. C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表

    C#实现调用打印机(打印字符串.打印绘图.打印图片),还差打印水晶报表 目的:调用打印机的使用 缺陷:打印的对象不全(还差打印水晶报表),不能实现在插件绘图板中画什么打印什么 改进:同缺陷,希望朋友们 ...

  6. 调用浏览器局部打印,空白、只有一页问题、火狐兼容

    调用浏览器局部打印,空白.只有一页问题.火狐兼容 项目中需要局部打印页面的图表,图表类型多而杂,因此html结构中包含了canvas和iframe,iframe中又包含canvas. 刚开始根据网上的 ...

  7. C#调用TSC条码打印机打印二维码

    #region 调用TSC打印机打印/// <summary>/// 调用TSC打印机打印/// </summary>/// <param name="titl ...

  8. 【C#】C#调用Bartender模板打印,输出图片,PDF

    上篇文章:[C#]C#调用Bartender模板打印 首先,新建bt模板,再代码调用 直接上代码 public class BTHelper {/// <summary>/// 打印/// ...

  9. JAVA调用打印机,打印PDF文件

    1. 导入maven依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdf ...

最新文章

  1. 如何利用C#开发“通讯录”小程序
  2. .sql文件如何执行_深入理解SQL原理:SQL查询语句是如何执行的?
  3. 服务器系统健康值计算算法,身体健康指数计算方法
  4. 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)
  5. Python函数的参数传递方式
  6. celery java_Python的Java Celery项目相当于什么?
  7. bootstrap日期控件 只显示 年月
  8. 网页设计与制作教程(第2版)刘瑞斯+课本演练代码
  9. MapXtrem + Asp.net 地图随窗体改变大小
  10. android 仿美团日历,仿小米日历 纵享丝滑切换的周月效果
  11. 【Flink】参数不生效
  12. 最简单ListView显示联系人姓名和电话号码
  13. 抗混叠滤波器 - ADC前端放大器和RC滤波器设计实现步骤
  14. python三国演义人物出场统计ppt_Python统计三国演义主要人物出场次数
  15. linux bmc管理(工作笔记,随时更新)
  16. maskrcnn-Github-balloon
  17. display, visibility, overflow 三者的作用与区别
  18. mac下修改文件的md5值
  19. html生成海报图片
  20. ETAP中谐波源数据

热门文章

  1. 给el-input type=“number“的文本框设置默认值
  2. 20181103 Nginx(布尔教育)
  3. 【解决】更新微信后为何还是没有修改微信号的功能
  4. GPT是什么,GPT-4是什么
  5. JNI字段描述符Ljava/lang/String;
  6. unity3d培训_007
  7. 计算机专业大学生应该怎么规划未来?
  8. 瀑布模型,冯.诺依曼结构——摘自百科
  9. (三)棋盘覆盖问题(思路)
  10. 计算机公办学校招收人数,2018长沙市小升初微机派位一共有多少人参加