`
cuijiemin
  • 浏览: 265425 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C#枚举系统安装的所有打印机

阅读更多
最近在论坛中不少网友问"如何把Windows安装的所有打印机列出来",在下面的程序中我们将把系统中所安装的打印机用列表框列出来,同时为默认打印机设置缺省值。

  在下面的程序中我们用到了两个主要的类,把所有的打印机列表出来用到了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());
  }

 }
}

以上代码在windows xp + vc.net 下测试通过,编译后在Windows98上测试通过

<!-- Search Google -->
Google 输入您的搜索字词 提交搜索表单
<!-- google_ad_client = "pub-7330597899926046"; google_ad_format = "350x30_sdo"; google_link_target = 2; google_color_bg = "ffffff"; google_color_link = "000000"; google_encoding = "GB2312"; //-->
<!-- Search Google --> <!-- google_ad_client = "pub-7330597899926046"; google_ad_slot = "8791774696"; google_ad_width = 468; google_ad_height = 60; //-->
分享到:
评论

相关推荐

    C#枚举系统安装的所有打印机教程

    本教程将深入探讨如何使用C#枚举系统安装的所有打印机,这对于需要与硬件设备交互的应用程序,如打印管理软件,至关重要。 首先,我们需要理解枚举(Enumeration)在C#中的概念。枚举是一种特殊的类型,它定义了一...

    C#枚举本地计算机硬件设备

    在这个场景中,"C#枚举本地计算机硬件设备"指的是使用C#语言来获取并列举本地计算机上的硬件设备资源。这涉及到操作系统交互、设备驱动程序接口以及系统管理服务的使用。 首先,要枚举本地计算机的硬件设备,你需要...

    枚举打印机

    在Windows操作系统中,枚举打印机是一项常见的任务,主要用于获取系统中已安装的所有打印机的信息。这篇描述中的"枚举打印机"演示代码,旨在教开发者如何在C++或者类似支持Windows API的编程语言中,遍历并显示当前...

    c#获取打印机当前打印状态完整源码

    创建一个查询字符串(例如:"SELECT * FROM Win32_Printer"),然后通过`Get()`方法执行查询,返回的`ManagementObjectCollection`集合中包含了所有打印机的信息。 ```csharp using System.Management; ...

    斑马打印机C#上位机ZPLPrinter(通过USB打印机).zip

    斑马打印机C#上位机ZPLPrinter项目是针对Zebra品牌打印机开发的一款应用程序,它主要利用C#语言实现,通过USB接口与打印机进行通信,实现了高效便捷的打印功能。ZPL(Zebra Programming Language)是斑马公司的一种...

    C#开发的打印机状态监控工具

    1. 打印机枚举模块:获取本地和网络上的所有打印机列表。 2. 状态监测模块:定期检查打印机状态并更新显示。 3. 事件处理模块:监听打印机事件,如缺纸、墨尽、错误等。 4. 用户界面模块:显示打印机信息,发送报警...

    C#中修改计算机默认打印机

    4. 在实际应用中,`GetCurrentDefaultPrinter`方法需要实现获取当前默认打印机的逻辑,这通常需要枚举所有打印机并找到标记为默认的那个。这可以通过`EnumPrinters`函数实现,但这个过程相对复杂,涉及到处理结构体...

    C# 监控打印机次数

    然后,我们还需要关注`EnumPrinters`函数,它能枚举本地或网络上的所有打印机,并获取相关信息。接下来,我们将关注`AddJob`和`GetJob`这两个API函数,它们可以帮助我们监控打印机的工作状态,包括打印任务的添加和...

    枚举系统中已经安装的所有硬件设备

    在Windows操作系统中,枚举系统中已经安装的所有硬件设备是一项重要的任务,这通常涉及到系统管理和设备驱动程序的开发。在给定的标题和描述中,我们聚焦于一个基于VC6.0的C++程序,该程序能够查看并列出系统中的...

    打印机windows平台下API接口,含VB/VC/c#/Delphi工程案例

    例如,`EnumPrinters`函数可以枚举系统中的所有打印机,`OpenPrinter`和`ClosePrinter`则用于打开和关闭打印机句柄。 Delphi是基于Object Pascal的语言,它同样支持直接调用Windows API。Delphi的`uses`语句可以...

    获取计算机上面所有的打印机列表并默认选中默认打印机

    在Windows操作系统中,获取计算机上所有打印机的列表以及设置默认打印机是系统管理和自动化脚本编写中的常见任务。这个过程涉及到Windows API(应用程序接口)的调用,通常通过编程语言如C++、C#或VB.NET来实现。...

    完整的打印机监控源码

    客户端安装个软件。负责监控该电脑的打印动作。并把内容转成图片储存。并将图片传送到服务器机器上,并将打印内容传到服务器上面. 解决方案: 1. 先用api打印函数连接到指定的打印机.再试着用枚举函数()获得打印作业...

    C# 获取打印机当前状态的方法

    "C# 获取打印机当前状态的方法" 在本文中,我们将讨论如何使用 C# 来获取打印机当前状态的方法。获取打印机当前状态是非常重要的,因为它可以让我们了解打印机的当前状态,从而更好地控制打印机的工作。 首先,...

    C#Socket、USB、串口通信(与打印机通信,东芝)

    首先需要枚举系统中的USB设备,然后根据设备的Vendor ID (VID) 和 Product ID (PID) 找到目标打印机。一旦找到,就可以建立通信通道并发送控制命令。USB通信通常比串口快,但需要更复杂的驱动支持和设备识别。 再者...

    ESC_POS无驱动USB打印机

    它能够直接通过USB接口连接到计算机,无需安装特定的打印机驱动程序,简化了部署和维护过程。下面将详细介绍这个主题,包括USB设备的识别与枚举以及ESC/POS协议的相关知识。 USB设备识别与枚举是操作系统识别并管理...

    C#获取打印机状态+API函数详解

    此外,文章中还提及了Windows API函数EnumPrinters,该函数用于枚举所有打印机或者特定的打印机,该函数的实现是在Windows的核心系统动态链接库winspool.drv中定义的,用户需要使用DllImport属性引入对应的库才能...

    打印机监控代码

    在Windows操作系统中,打印机监控涉及到的API通常包括`EnumPrinters`和`GetPrinter`等,它们允许程序枚举所有可用的打印机以及获取特定打印机的信息,如名称、状态等。在32位系统中,这些API能正常工作,但在64位...

    c#控制斑马Zebra打印机源码.rar.rar

    对于本地打印机,可以使用Windows的枚举设备方法找到打印机。 2. **使用Zebra SDK**:Zebra提供了一个名为ZPL(Zebra Programming Language)的打印机命令语言,它是斑马打印机理解和执行的指令集。SDK中的类库可以...

    C#使用ESC指令控制POS机打印小票

    - `GetPrinterList()`: 获取已安装的打印机列表。 - `Open()`: 打开指定打印机。 - `StartPrint()`: 准备向打印机发送控制指令。 - `SetLeft()`, `SetBold()`, `SetAlignMode()`, `SetFontSize()`: 设置打印参数...

Global site tag (gtag.js) - Google Analytics