Visual C++ 打印编程技术-编程基础-获取打印机

标准方法是用: EnumPrinters() 函数获取

#define PRINTER_ENUM_DEFAULT     0x00000001
#define PRINTER_ENUM_LOCAL       0x00000002
#define PRINTER_ENUM_CONNECTIONS 0x00000004
#define PRINTER_ENUM_FAVORITE    0x00000004
#define PRINTER_ENUM_NAME        0x00000008
#define PRINTER_ENUM_REMOTE      0x00000010
#define PRINTER_ENUM_SHARED      0x00000020
#define PRINTER_ENUM_NETWORK     0x00000040

  

BOOL EnumPrinters(
  _In_   DWORD Flags, // 打印机获取方式,见上表
  _In_   LPTSTR Name,
  _In_   DWORD Level,//PRINTER_INFO_1PRINTER_INFO_2 , PRINTER_INFO_4, and PRINTER_INFO_5  分别对应1,2,4,5
  _Out_  LPBYTE pPrinterEnum,//A pointer to a buffer that receives an array of PRINTER_INFO_1PRINTER_INFO_2PRINTER_INFO_4, orPRINTER_INFO_5 structures.                             // Each structure contains data that describes an available print object.
  _In_   DWORD cbBuf,//The size, in bytes, of the buffer pointed to by pPrinterEnum.
  _Out_  LPDWORD pcbNeeded,
  _Out_  LPDWORD pcReturned
);

  

	DWORD dwSize,dwPrinters;
	::EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,NULL,0,&dwSize,&dwPrinters);
	BYTE* pBuffer=new BYTE[dwSize];
	::EnumPrinters(PRINTER_ENUM_LOCAL,NULL,5,pBuffer,dwSize,&dwSize,&dwPrinters);
	if(dwPrinters!=0)
	{
		PRINTER_INFO_5* pPrnInfo=(PRINTER_INFO_5*)pBuffer;
		for(UINT i=0;i<dwPrinters;i++)
		{
			m_listbox.AddString(pPrnInfo->pPrinterName); //m_listbox : Listbox控件变量
                        pPrnInfo++;
		}
	}
    delete[] pBuffer;

  

时间: 2024-10-07 01:33:15

Visual C++ 打印编程技术-编程基础-获取打印机的相关文章

Visual C++ 打印编程技术-编程基础

背景: windows产生前,操作系统(如DOS等)都不提供支持图像处理的打印机驱动程序,使得程序员为打印出图像,不得不针对使用的打印机 自己编写设备驱动程序,导致了大量的.不必要的重复开发. 随着windows操作系统系统的面世,其所提供的设备环境模型允许开发人员将显示器.打印机和绘图仪等设备都堪称 二维绘图接口,并且 设置驱动程序已经由制造商完成,开发人员无需再编写打印驱动程序.Windows操作系统提供的API接口支持图像打印功能,但对开发者来 讲,打印依然是比较困难的编程任务.幸运的是,

Visual C++ 打印编程技术-编程基础-映射模式

映射模式: Visual C++ 中采用的坐标映射方式使得用户图形坐标和输出设别的像素完全一致. eg:当屏幕的像素大小为800X600时,每英寸包含屏幕像素为96,打印机则需要几倍的点数才能达到同样的逻辑尺寸 因此可通过转换坐标映射方式,是打印机采用的坐标比例比显示时所采用的坐标比例相应地大若干倍. 映射模式:在屏幕或打印机上绘图时候,可以使用英寸或者毫米代替作为单位(代替像素),往往更加直观. PS: 设备单位,逻辑单位 设备单位:是传递给绘图函数的X和Y值,他们可以表示英寸和毫米 逻辑单位

shell编程技术之-基础知识

一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪个解析器来解析. 例如: 二.基础知识 2.1 变量 shell本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义. 例如: 1 #!/bin/bash 2 3 #2.2 4 a="hello word" 5 b=5 6 echo "

多线程编程技术基础知识

GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=414 多线程编程技术基础知识 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同

网络编程技术

                                                     网络编程技术 Java 网络编程 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通讯. 网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机. 2.找到主机后如何可靠高效地进行数据传输. 目前较为流行的网络编程模型是客户端/服务器(C/S)结构. 即通信双方一方作为服务器等待客户提出请求并予以相应.客户则在需要服务时向服务器提出申请. 服务器始终运行,

socket网络编程的一些基础知识

源地址:http://blog.csdn.net/roger_77/article/details/1453049 目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket()函数 8) bind()函数 9) connect()函数 10) listen()函数 11) accept()函数 12) send()和recv()函数 13) sendto()和recvfrom()函数 

电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货

写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的人.当然因为技术的连贯性,推荐按照顺序查看. 上次课程:电脑小白学习软件开发-C#的选择语句.异常捕获,进攻程序员 课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号.回复“.net目录”,即可获取.微信公众号也包含大量学习教程,等你来~ 本系列教程进行学习的是C#语法.具体开发

一 GPU 编程技术的发展历程及现状

前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础工作的. 该系统架构简单来说就是处理器从存储器中不断取指,解码,执行. 但如今,这种系统架构遇到了瓶颈:内存的读写速度已经跟不上 CPU 的时钟频率了.具有此特征的系统被称为内存受限型系统,目前的绝大多数计算机系统都属于此类型. 为了解决这个问题,传统的解决方案是使用缓存技术.通过给 CPU 设立多级缓存,能够大

第一篇:GPU 编程技术的发展历程及现状

前言 本文通过介绍 GPU 编程技术的发展历程,让大家初步地了解 GPU 编程,走进 GPU 编程的世界. 冯诺依曼计算机架构的瓶颈 曾经,几乎所有的处理器都是以冯诺依曼计算机架构为基础的.该系统架构简单来说就是处理器从存储器中不断取指,解码,执行. 但如今这种系统架构遇到了瓶颈:内存的读写速度跟不上 CPU 时钟频率.具有此特征的系统被称为内存受限型系统,目前的绝大多数计算机系统都属于此类型. 为了解决此问题,传统解决方案是使用缓存技术.通过给 CPU 设立多级缓存,能大大地降低存储系统的压力