C#设置默认打印机-COM和WMI二种方式

C#实现修改计算机的默认打印机 (附完整源代码) 阅读详情

COM方式:使用Winspool.drv

WMI方式:Class=Win32_ Printer  另注(Powershell中可以 gwmi -Class "Win32_Printer"找到List )


C#实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Runtime.InteropServices;

namespace MyConsoleApp.Code
{
    /// <summary>
    /// 设置或者获取默认打印机类
    /// </summary>
    public class PrintHelper
    {
        #region DllImport

        [DllImport("Winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool SetDefaultPrinter(string printerName);

        [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool GetDefaultPrinter(StringBuilder pszBuffer, ref int pcchBuffer);

        public static string GetDefaultPrinter()
        {
            const int ERROR_FILE_NOT_FOUND = 2;
            const int ERROR_INSUFFICIENT_BUFFER = 122;
            int pcchBuffer = 0;
            if (GetDefaultPrinter(null, ref pcchBuffer))
            {
                return null;
            }
            int lastWin32Error = Marshal.GetLastWin32Error();
            if (lastWin32Error == ERROR_INSUFFICIENT_BUFFER)
            {
                StringBuilder pszBuffer = new StringBuilder(pcchBuffer);
                if (GetDefaultPrinter(pszBuffer, ref pcchBuffer))
                {
                    return pszBuffer.ToString();
                }
                lastWin32Error = Marshal.GetLastWin32Error();
            }
            if (lastWin32Error == ERROR_FILE_NOT_FOUND)
            {
                return null;
            }
            throw new Exception(Marshal.GetLastWin32Error().ToString());
        }

        #endregion

        #region WMI方式

        private static ManagementObjectSearcher query;
        private static ManagementObjectCollection queryCollection;

        private static ManagementObjectCollection GetManagementObjectCollection(string mql)
        {
            query = new ManagementObjectSearcher(mql);
            return query.Get();
        }

        public static string GetDefaultPrinterByWMI()
        {
            queryCollection = GetManagementObjectCollection("SELECT * FROM Win32_Printer WHERE Default=true");
            if (queryCollection != null)
            {
                foreach (ManagementObject mo in queryCollection)
                {
                    return mo["Name"].ToString();
                }
                return string.Empty;
            }
            else
                return string.Empty;
        }

        public static void SetDefaultPrinterByWMI(string PrinterName)
        {
            queryCollection = GetManagementObjectCollection("SELECT * FROM Win32_Printer");
            if (queryCollection != null && queryCollection.Count > 0)
            {
                foreach (ManagementObject mo in queryCollection)
                {
                    if (string.Compare(mo["Name"].ToString(), PrinterName, true) == 0)
                    {
                        mo.InvokeMethod("SetDefaultPrinter", null);
                        break;
                    }
                }
            }
        }

        #endregion
    }

    /*
     string printName = MyConsoleApp.Code.PrintHelper.GetDefaultPrinterByWMI();
     MyConsoleApp.Code.PrintHelper.SetDefaultPrinterByWMI("Microsoft XPS Document Writer");
     printName = MyConsoleApp.Code.PrintHelper.GetDefaultPrinterByWMI();
     */
}


Powershell 实现

#当前默认打印机
Get-WmiObject -Query "select * from win32_printer where Default=true" ;

#另一种写法,从打印机列表中查找默认
$print=Get-WmiObject -Query "select * from win32_printer" ;
$print|%{if ($_.Default){$_.Name} }

#设置默认的方法
$print[0].SetDefaultPrinter()



C#中修改计算机默认打印机 C#中修改计算机默认打印机完整代码,测试通过,欢迎大家下载学习 立即下载

相关推荐

C#控制打印机直接打印,设置默认打印机

C#控制打印机直接打印,设置默认打印机,窗体运用窗体运用窗体运用窗体运用窗体运用

C#设置与获取默认打印机 获取打印机列表

1

chenhao0568的专栏 3938

万象RK3506-EG1800网关使用说明

摘要:HD-RK3506-EG1800是一款高性能工业物联网边缘计算网关,支持Buildroot和Ubuntu双系统。文档详细介绍了网关的网络配置(包括ETH0/ETH1的静态IP设置、WiFi连接)、时钟同步、HSL软件安装配置(含开机自启动服务)、系统日志优化以及刷机操作指南(Loader/Maskrom模式)。特别提供了基于lighttpd的网页管理方案,通过HTML界面实现网络参数可视化配置,包含身份验证、实时状态显示和表单提交功能。网关默认ETH0固定IP为192.168.1.10,提供完整的CL

tian_jiangnan的博客 175

C#用WMI改变系统打印机属性

本文以如何将系统打印机属性中“保留打印的文档”打勾为例,来讲解C#如何简单使用WMI来获得系统属性以及改变系统属性。 一、“保留打印的文档”在哪里? 打开控制面板->设备和打印机->右键打印机->打印机属性->高级->保留打印的文档 二、代码部分 1、右键引用->添加引用->程序集->找到System.Management->添加引用 2、在程序最上方添加引用 using System.Management; 3、...

weixin_36508976的博客 1124

生物信息学避坑指南:Scissor算法参数alpha和cutoff的黄金设置法则

本文深入解析了生物信息学中Scissor算法的关键参数alpha和cutoff的黄金设置法则,帮助研究者有效整合bulk RNA与单细胞数据,识别单细胞亚群。通过实战验证的调参策略,避开常见陷阱,获得可靠的生物学发现,特别适用于肿瘤异质性研究和免疫细胞分型等场景。

weixin_33734785的博客 451

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1608

C#打开打印机首选项对框 设置打印机

【代码】C#打开打印机首选项对框 设置打印机。

chenhao0568的专栏 1241

UR机械臂正逆运动学解析:从DH参数到8组解的完整求解策略

本文深入解析UR机械臂的正逆运动学求解策略,从DH参数原理到完整的8组解求解方法。详细介绍了正运动学的坐标变换过程,以及逆运动学中Atan2函数和三角恒等变换的应用,并揭示了8组解的产生机制。通过实际案例和调试技巧,帮助工程师掌握UR机械臂运动学求解的核心技术。

weixin_29094775的博客 414

使用C#更改打印机驱动打印属性设置

介绍 为应用程序打印MS Word文档,并且应该给用户一个选项来更改他/她想要打印的文档的打印机设置,以便用户可以更改打印机的页面源和双面打印属性。 当我们开始将代码转换为C#时,我发现MS Word API中没有功能来更改打印机的双面打印属性。Word在WordApplication类' PrintOut方法中提供了一个参数,但是Microsoft建议不要使用它,因为它是操作系统和语

Jaylon Wang的专栏 5114

用Python+OpenCV搞定线激光相机标定:从棋盘格到3D点云的保姆级实战

本文详细介绍了使用Python和OpenCV进行线激光相机标定的全流程实战,从硬件准备到3D点云重建。涵盖相机内参标定、激光平面方程拟合、三维重建等关键技术,提供完整的代码实现和工程优化建议,帮助开发者实现毫米级精度的工业检测和三维测量系统。

weixin_29227425的博客 287

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4860

用C#和WMI获取逻辑驱动器详细信息

 在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Management Instrumentation - Windows 管理规范 )来实现上述功能。

Mark的专栏 894

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4932

用 C# 和 WMI 获取逻辑驱动器详细信息

【本文已在天极首发】在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获...

clj2012的博客 244

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5501

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c# 获取路径的盘符_c#获取驱动器盘符

在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Management Instrumentation - Windows 管理规范 )来实现上述功能。一...

weixin_39526415的博客 1071

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用C#和WMI获取逻辑驱动器详细信息(转)

用C#和WMI获取逻辑驱动器详细信息 作者:窦瑞欣 出处:天极开发 责任编辑: 方舟 在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Ma...

weixin_34343000的博客 232

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c#获取驱动器盘符

在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Management Instrumentation - Windows 管理规范 )来实现上述功能。 ...

weixin_30730151的博客 174

C#与Java全面对比:为何上位机、机器视觉与工控场景更倾向C#

在服务端与桌面开发领域,编程语言的选择往往直接影响工程效率与系统性能。Java长期占据企业级应用主导地位,而C#凭借.NET生态的持续演进,在Windows桌面、工业自动化、机器视觉等场景展现出独特优势。从语言特性看,C#的异步编程、值类型、模式匹配等现代化能力更为突出,配合Span<T>可实现零拷贝数据操作;同时.NET 8原生AOT发布让应用部署轻量化。在应用实践层面,上位机开发、串口通信、摄像头帧处理等硬核场景下,C#的成熟库与WinForms/WPF工具链显著降低开发成本。对于Unity游戏开发与跨

weixin_34187862的博客 410

C# vs Java:为什么2025年我更推荐C#而不是Java?

在编程语言选型中,C#与Java常被拿来比较。两者同为现代面向对象语言,但工程体验、平台整合与生态深度差异显著。C#凭借.NET的跨平台能力、async/await异步模型和LINQ等语言特性,在服务端、桌面及工业自动化领域表现突出;尤其在上位机开发、串口通信、机器视觉等场景,C#拥有成熟SDK与高效工具链,能快速对接PLC、相机等硬件设备。而Java虽主导大型互联网后端与大数据生态,但面试中常见的“Java八股文”也折射出竞争内卷。从部署体验看,C#支持单文件发布与AOT编译,启动快、资源占用低。对于追求

weixin_30800987的博客 303

RedSnarf工具解析:Windows域渗透中的凭证窃取与横向移动实战

在Windows域渗透测试中,横向移动和凭证窃取是攻击者突破内网防御的关键技术。其核心原理基于对Windows认证协议(如NTLM和Kerberos)的深入理解,攻击者通过利用这些协议的弱点,可以在不获取明文密码的情况下实现身份仿冒。LSASS进程作为Windows安全子系统的核心,存储着包括NTLM哈希和Kerberos票据在内的关键凭据,因此成为攻击者的主要目标。通过SMB、WMI等原生协议,攻击者能够远程转储LSASS内存、执行哈希传递攻击,从而实现高效的横向移动。RedSnarf正是这样一款专注于此

weixin_34279246的博客 367

Windows脚本 WSH 对象及其相关任务和参考 4/4

下表列出了 WSH 对象及其相关的典型任务。 对象 该对象可用于 Wscript 设置和检索命令行参数 确定脚本文件的名称 确定宿主文件的名称(wscript.exe 或 cscript.exe) 确定宿主的版本信息 创建 COM 对象,与 COM 对象连接以及断开连接 接收事件 通过编程方式停止执行脚本 ...

weixin_34018202的博客 183
上一篇: 数字的英文表达(趣味题C#)
下一篇: 开通了git@oschina
daone
博客等级 码龄20年 34粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值