C#枚举系统安装的所有打印机
在下面的程序中我们用到了两个主要的类,把所有的打印机列表出来用到了PrinterSettings 类,获取系统默认打印机用到了PrintDocument 类,下面我们就动手实践一下吧。
先新建一个windows form的工程,然后加入一个lable和一个comBox,就行啦,关键在下面啦,我们如何获得默认打印机,就得用下面的语句。
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;//获取默认的打印机名
有了默认的打印机,我们再把所有的打印机列出来。
PrinterSettings类有一个InstalledPrinters的属性,不知是做什么的吧,查MSDN如下解释:
PrinterSettings.InstalledPrinters 获取安装在计算机上所有打印机的名称。
在C#中如下定义:
[C#]
[Serializable]
[ComVisible(false)]
public static PrinterSettings.StringCollection InstalledPrinters
{get;}
属性值
PrinterSettings.StringCollection,它表示安装在计算机上所有打印机的名称。
异常
异常类型 条件
Win32Exception 未能枚举可用的打印机
备注
可以使用已安装的打印机名称的集合向用户提供要打印到的打印机选择。
下面的示例用已安装的打印机填充 comboInstalledPrinters 组合框,并且还在选择更改时使用 PrinterName 属性设置用于打印的打印机。PopulateInstalledPrintersCombo 例程在窗体初始化时被调用。该示例假定存在名为 printDoc 的 PrintDocument 变量,并且存在特定的组合框。
[C#]
//下面括号内的自己翻译添加进去的
private void PopulateInstalledPrintersCombo()
{
// Add list of installed printers found to the combo box.(将系统中所有的打机加入列表框)
// The pkInstalledPrinters string will be used to provide the display string.(列表框中显示的字串由pkInstalledPrinters提供)
foreach(String pkInstalledPrinters in
PrinterSettings.InstalledPrinters)
{
comboInstalledPrinters.Items.Add(pkInstalledPrinters);
}
}
private void comboInstalledPrinters_SelectionChanged(object sender, System.EventArgs e)
{
// Set the printer to a printer in the combo box when the selection changes.(当列表框改变时设置选择的打印机)
if (comboInstalledPrinters.SelectedIndex != -1)
{
// The combo box's Text property returns the selected item's text, which is the printer name.(将选择的打印机名在列表框中显示)
printDoc.PrinterSettings.PrinterName= comboInstalledPrinters.Text;
}
}
看了MSDN的说明,懂多了吧,下面是我写练习完整代码.
//程序说明:将系统中的所有打印机在列表框中列出
//程序变量: PrintDocument prtdoc、string strDefaultPrinter
//编写人:蚕蛹(sillnet@163.net)
//日期:2003-03-20
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace PrinterList
{
///
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox printerList;
///
/// 必需的设计器变量。
///
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;//获取默认的打印机名
foreach(String strPrinter in PrinterSettings.InstalledPrinters)
//在列表框中列出所有的打印机,
{
printerList.Items.Add(strPrinter);
if (strPrinter == strDefaultPrinter)//把默认打印机设为缺省值
{
printerList.SelectedIndex = printerList.Items.IndexOf(strPrinter);
}
}
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.printerList = new System.Windows.Forms.ComboBox();
this.SuspendLayout();
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 16);
this.label1.TabIndex = 0;
this.label1.Text = "选择打印机:";
//
// printerList
//
this.printerList.Location = new System.Drawing.Point(88, 22);
this.printerList.Name = "printerList";
this.printerList.Size = new System.Drawing.Size(192, 21);
this.printerList.TabIndex = 1;
this.printerList.Text = "当前系统未装打印机";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(288, 61);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.printerList,
this.label1});
this.Name = "Form1";
this.Text = "打印机列表";
this.ResumeLayout(false);
}
#endregion
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
相关文章:

编译安装linux内核步骤
编译安装linux内核步骤: 一.获取内核源码 源码网址:www.kernel.org 二.解压内核源码 首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-x.y.z的子目录。该目录…

遏制企业数据泄露之殇,大咖切磋云安全的攻防之道
整理 | 寇雪芹出品 | AI 科技大本营(ID:rgznai100)5 月 7 日,美国最大燃油管道、东部地区油气输送主动脉 Colonial Pipeline 计算机系统被黑客入侵和勒索,导致美国17个州和华盛顿特区进入紧急状态。这次黑客入侵无异于一记重拳&am…

【NOIP2016】愤怒的小鸟
Description Kiana最近沉迷于一款神奇的游戏无法自拔。 简单来说,这款游戏是在一个平面上进行的。 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如y ax^2 bx的曲线,其中a, b是…

“智能”基石:人工智能数据标注与训练,是决定智能时代的第一步
记者 | 邓晓娟 2021年5月20日~23日,由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导,深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心࿰…

C#中对POP3邮件解码
Base64和下面将要介绍的Quoted-Printable都属于MIME (多部分( multi-part)、多媒体电子邮件和 WWW 超文本的 一种编码标准,用于传送诸如图形、声音和传真等非文本数 据)。MIME定义在RFC1341中。 Base64是现今在互联网上应用最多的一种编码…

php 命中算法
function hitted($rate,&$num){if (is_string($rate))$rate ( float ) $rate;if ($rate > 1)throw new ArgumentException(传入的概率值 $rate 必须是 0~1 之间的浮点数或整数(0|1)。, -1);$r 100 * $rate;$v mt_rand(1, 100);$num $v;if ($v < $r)return true;r…

iframe 数据传递
1.使用iframe是父页面与子页面的数据传递2.使用iframe 跳转部分研究处理ios兼容性 2.1 safai 会阻止iframe里的window.open()函数 采用了讲需要跳转的页面传向父页面,让父页面进行处理跳转 //子页面向父页面传递信息 parent.postMessage({变量名: 数据}, *);//子页面…

C#调用控制面板选项
因为C#是由Microsoft公司推出的,所以它对Microsoft的所有产品的兼容性与相互操作性是其它公司开发出的编程语言所不及的。Microsoft开发的Windows操作系统与C#之间的关系也非常紧密。从而实现了C#对Windows的无缝操作。 下面,我们就以“C#对Windows控制面…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
5月27日20点,第 13 期「大咖来了」! CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉,多方视角探讨 RTC 超级风口与机遇,还有众多精美礼品等你拿! 立即戳:https://live.csdn.net/room/csdnnews/cn…

查询/新建/修改本地用户和组
通过ADSI新建用户user2: 1 #创建新用户,创建完成后的新用户不隶属于任何组2 $computerName$env:computername3 #定义用户名、密码、描述信息4 $username"user2"5 $userpass"password"6 $userdesc"description"7 $ADSI [A…

支付宝接入参考博客
http://www.cnblogs.com/stulzq/p/7606164.html转载于:https://www.cnblogs.com/baiqian/p/7609443.html

活动目录的优势
活动目录的优势 Active Directory服务提供了单一登入的能力和一个所有基础设施相关信息的集中储存机制,大幅度的简化了使用者和计算机的管理,同时提供优越的网络资源存取能力。我在本文中主要讲述一下Microsoft Windows Server 2003 中的 Active Directo…

C#编写一个抓网页的应用程序
本文利用C#和.NET提供的类来轻松创建一个抓取网页内容源代码的程序。HTTP是WWW进行数据访问最基本的协议之一,在.NET的基本类型库类中提供了两个对象类:HTTPWebRequest和HTTPWebResponse,分别用来向某资源发送请求和获得响应。为了得到一个资…

从粗放到精细,如何用AI技术实现信息流广告投放的降本增效
中国的SaaS在经历2020年全球爆发的疫情之后,迎来了前所未有的高光时刻,或者说蛰伏数年终于迎来了爆发。 2021年5月20日,ZTouch,北京中量质子网络信息科技有限公司旗下的企业数智化服务平台,发布了广告数智投放平台Dar…

广义动量定理之作用点的应用分析
广义动量定理之作用点的应用分析 从广义动量定理FαtnmV的角度说,改变作用点,就可以改变成果nmV。作用点派以调整作用点的准确度作为达成目的的手段。 作用点应用于聚焦理论 理论简介:聚焦理论使企业集中力量于某几个细分市场,主攻…

将DBF,XLS,XML,MDB文件导入C#DataGrid的方法
以下的源码里分别给出了将DBF,XLS,XML,MDB文件导入C#DataGrid的方法,供各位参考。 //PutInDataSet.cs的源码 using System; using System.Data.Odbc; using System.Data.OleDb; using System.Data; using System.Collections; namespace PutInDataSet { /// <summary…

超星未来发布新一代高级别自动驾驶车载计算平台
5月25日,由中国汽车工程学会、国家智能网联汽车创新中心主办的第八届国际智能网联汽车技术年会(以下称“CICV 2021”)在北京亦创国际会展中心举办。超星未来联合创始人、首席技术官梁爽博士应邀出席发表演讲,并在主论坛上发布了超…

Effective Java - Item 1: Consider static factory methods instead of constructors
考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int, Random) , 它返回一个可能是素数的 BigInteger. 使用工厂方法 BigInteger.probablePrime 可以…

服务器和普通用户电脑的区别
服务器和普通用户电脑的区别 1、硬件方面 经常收到戴尔的广告邮件,看到里面的服务器配置不怎么高,可是价格都很贵。想知道,服务器和普通电脑的区别在哪里呢? 目前使用服务器的站长和企业也比较多,也许有人会觉得二者差…

C#:消息队列应用程序
文章“MSMQ:可伸缩、高可用性的负载平衡解决方案(英文)”介绍了一种解决方案,用于高可用性消息队列 (MSMQ) 的可伸缩负载平衡解决方案体系结构。此解决方案中涉及了一种将 Windows 服务用作智能消息路由器的开发方案。这样的解决方…

从腾讯实时音视频发家史,看爆发中的 RTC 将何去何从
作者 | 夕颜头图 | 下载于视觉中国出品 | AI 科技大本营(ID:rgznai100)早在2015年左右,直播和短视频的兴起渗透进普通人的日常生活,人们信息消费的内容已经开始从文字向语音、视频信息转变。而疫情期间全民“家里蹲”的窘境&#…

山寨c 标准库中的getline 函数
2019独角兽企业重金招聘Python工程师标准>>> 要山寨一个函数,只要看两点 原版函数的形参。原函数的返回值。下面是函数原型。 ssize_t getline(char **lineptr, size_t *n, FILE *stream); 函数返回值。 RETURN VALUE On success, getline() and getde…

封ip对爬虫的影响
今天要聊的是封ip对爬虫的影响。我认为封ip能拒绝一部分网络请求,减轻服务器的压力,但是如果要是建立一个好的ip池,封对爬虫的影响不大。 爬取国内一个拍卖公司的网站,刚开始用多进程下载,每分钟能爬取 1000个页面&…

Python 的一万种用法:制作 Web 可视化页面
来源 | 法纳斯特头图 | 下载于ICphoto一谈到Web页面,可能大家首先想到就是HTML、CSS或JavaScript。本次小F给大家介绍一下如何用Python制作一个数据可视化网页,使用到的是Streamlit库,轻松将一个Excel数据文件转换为一个Web页面,提…

【Go语言】LiteIDE使用的个人使用方法
Go语言开发 可以使用的IDE很多 (Goclipse,sublime,notepad,vim等)目前使用的最顺手的就是LiteIDE了 但是尽管这样,一开始使用LiteIDE也有很多不习惯的地方,下面主要总结了一些自己喜欢的用法 首…

发挥大数据及其产业在推动发展方式转变上的作用
大数据时代的到来,互联网成为基础设施,数据变成重要资源,这不仅意味着海量、多样、快速的数据处理和技术创新,更为重要的是改变了传统要素的组合方式。这种变化客观上要求必须转变传统的经济增长方式,实现创新驱动发展…

Google 全球 IP 地址库一览表(更新中)
IP 地址来源:http://www.kookle.co.nr,共计4351个。【链接】http://www.kookle.co.nr/https://github.com/justjavac/Google-IPsBulgaria93.123.23.193.123.23.293.123.23.393.123.23.493.123.23.593.123.23.693.123.23.793.123.23.893.123.23.993.123.2…

Linux下的阻塞(Block)
阻塞(Block)这个概念。当进程调用一个阻塞的系统函数时,该进程被置于睡眠(Sleep)状态,这时内核调度其它进程运行,直到该进程等待的事件发生了(比如网络上接收到数据包,或…

发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?...
作者 | 伍杏玲出品 | AI 科技大本营(ID:rgznai100)头图 | 下载于ICphoto2015 年,在英特尔就职 28 年的总裁 Renee James 辞职,正在大众纷纷猜测她将如何开启下一段旅程时,她有了创业的想法,2017 年带领新团…

纷纷布局的全光网,是你所熟知的吗?
近日,中国电信甘肃公司举行甘肃全光网建成发布会,至2017年4月30日,甘肃省已建成14个全光网市州、87个全光网县区、1234个全光网乡镇、10000个全光网行政村,全省市、县、乡光网宽带覆盖率达到95%以上,全面实现光纤到户;…