首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#遍历系统所安装打印机,使用WMI方式获取打印所有属性

有网友发消息来询问,C#如何遍历系统已经安装所有打印机,并获得每个打印相关信息,如:端口,名称等等 C#里面,虽然在 System.Drawing.Printing 这个namespace下...,提供了一些对系统打印访问功能,但是,说实话是太弱了,对获取打印相关属性基本是无能为力。...C#里面获取打印详细信息,常用用2种方式: 使用 Windows API 使用 WMI 我这里使用是WMI方式,因为此方式,是采用了类SQL方法,将windowsWMI管理信息,作为一种数据库形态来提供...,使用起来比较顺手 .NET 里面对WMI使用,是放在 System.Management 这个空间下,要使用的话,需要先添加对 System.Management.dll 引用 具体代码如下:...属性名 : 属性 形式 } } 应该是一目了然了吧,嘿嘿

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

C 关于使用异或运算交换两数

异或运算可以达到交换两数目的,代码如下: ? 但不推荐使用这种方式,附上常用临时变量方法对比说明。 临时变量方法: ?...对于临时变量法,每次赋值只要读取一个变量到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中...如果使用C语言实现上述两种方法,并用gcc编译器编译,可以使用命令 gcc -S swap.c 查看相应汇编代码,临时变量法代码行数更少,另外使用 gcc 编译器时,用异或运算交换数组会出错,参见链接...在不引入临时变量基础上,交换两数还可以使用三次加减法,代码如下: ? 这种方式同样需要三次内存写入操作,同时代码可读性也较差。...最后附上两张三种方法编译后对应汇编代码对比图(平台:Ubuntu14.04,gcc 4.8.4),图中 swap1.c 文件对应临时变量法,swap2.c 文件对应加减方法,swap3.c 文件对应异或方法

92840

STM32单片机极简方法 使用宏定义 代替复杂重定向printf()函数,实现串口打印。(HAL库例程)

对于 printf() 函数我们并不陌生,初学C语言使用第一个函数,其作用是在终端打印显示格式化字符串。...但是如果我们使用是单片机运行C语言代码,如果不经任何修改直接使用 printf() 函数,结果是什么现象都没有。...要想使用这个函数,常规方法是重定向 printf() 函数,结合串口来打印到串口助手上位机。这里重定向就非常复杂了,你需要懂 printf() 函数内部实现机制。。。。。...#endif 以上代码表示用 ps() 这个宏函数代替HAL库串口发送函数,并且可以使用格式控制符%c,%d,%f,\r,\n等可变参数控制符。...,存到一个预先定义好字符数组中,然后再用HAL库串口发送函数,把该字符数组内信息发出去,发送个数就是sprintf()返回: uint8_t USART_TX_BUF[200]; //发送缓冲数组

1.9K20

C:_debug_printf,基于vsnprintf 或 vprintf实现带时间戳和源码信息(__FILE__,__FUNCTION__, __LINE__)格式化打印输出

C程序时候,printf输出调试信息是常态,printf输出调试信息时如果能自动带源码信息(__FILE__,__FUNCTION__, __LINE__),显然更方便查找问题,如果能再加上时间戳就更完美了...而且__FILE__提供是源码全路径名,打印实可能会很长。...为了少敲点代码,我基于vsnprintf 和 vprintf实现了带时间戳和源码信息(__FILE__,__FUNCTION__, __LINE__)格式化打印输出函数_debug_printf 完整代码及调用示例如下...,需要拿去: _debug_printf.c /* * _debug_printf.c * _debug_printf * 基于vsnprintf 或 vprintf实现带时间戳和源码信息(..._debug_printf.c _debug_printf.c: warning C4819: 该文件包含不能在当前代码页(936)中表示字符。

1.5K20

C++ 使用栈求解中缀、后缀表达式

前言 表达式求值对于有知识经验的人类而言,可以通过认知,按运算符优先级进行先后运算。但对计算机而言,表达式仅是一串普通信息而已,需要通过编码方式告诉计算机运算法则。...在一个复杂表达式中,操作数和运算符可以有多个,运算符之间存在优先级,且不同运算符所需要操作数数量也有差异。这时,表达式计算过程就变得较复杂。...有括号时,先算括号内,后算括号外,对于多层括号,由内向外进行。 乘方连续出现时先算最右边。 但是,这里需要知道, 因为使用到了出栈、入栈操作,运算符在栈外和栈内优先级是不一样。...则栈中为最终结果。 如下是求解后缀表达式8571-*+82/-代码。...后缀表达式中是没有括号,操作数后面的运算符优先级由左向右降低)。 重复以上过程直到遇到结束符。 问题关键在于运算符优先级比较,并且要考虑同一个运算符在栈内和栈外级别。

76600

C 语言】数组 ( 验证二维数组内存是线性 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组和地址 )

文章目录 一、验证二维数组内存是线性 1、打印二维数组 2、以一维数组方式打印二维数组 3、打印二维数组和地址 二、完整代码示例 一、验证二维数组内存是线性 ---- 验证二维数组内存是线性...: 验证方法如下 ; ① 给二维数组赋值 , 然后 打印二维数组 ; ② 使用 一维数组 方式打印二维数组 ; ③ 打印出二维数组 地址 ; 1、打印二维数组 打印二维数组...定义一个函数 , 函数接收一个 int* 形参指针 , 使用该指针访问二维数组中元素个数 , 也可以成功访问 ; /** * @brief print_array2 使用一维数组方式打印二维数组...} } } /** * @brief print_array2 使用一维数组方式打印二维数组 * @param array */ void print_array2(int *array...print_array(array); // 使用一维数组方式打印二维数组 print_array2(array); // 打印二维数组和地址

2.4K20

一个printf(结构体指针)引发血案

我把发来测试代码进行验证,思考好久也无法解释为什么会出现那么奇怪打印结果。 为了整理思路,我到阳台抽根烟。晚上风很大,一根烟我抽了一半,风抽了一半,可能风也有自己烦恼。...从现象上看,似乎是 printf 语句在执行过程中打印第一个数字之后,影响到了指针 p ,但是具体是怎么影响说不清楚,而且它是系统里库函数,肯定不能改变 p 。..."abcd";char *pc = aa;printf("%d, %d \n", *pc, *pc); 编译、执行,打印结果为:"97, 97",非常正确!..., 30}; printf("%d %d %d \n", a, a, a);} 编译、执行,打印结果为:10 20 30,把 3 个成员变量打印出来了,太诡异了!...因为栈中所有动态参数被提取后,arg 为 0x01020310(最后一个参数上一个地址),如果不设置为 NULL 的话,下面使用的话就得到未知结果,为了防止误操作,需要设置为NULL。

83820

一个printf(结构体指针)引发血案

我把发来测试代码进行验证,思考好久也无法解释为什么会出现那么奇怪打印结果。 为了整理思路,我到阳台抽根烟。晚上风很大,一根烟我抽了一半,风抽了一半,可能风也有自己烦恼。...从现象上看,似乎是 printf 语句在执行过程中打印第一个数字之后,影响到了指针 p ,但是具体是怎么影响说不清楚,而且它是系统里库函数,肯定不能改变 p 。..."abcd"; char *pc = aa; printf("%d, %d \n", *pc, *pc); 编译、执行,打印结果为:"97, 97",非常正确!...{10, 20, 30}; printf("%d %d %d \n", a, a, a); } 编译、执行,打印结果为:10 20 30,把 3 个成员变量打印出来了,太诡异了!...因为栈中所有动态参数被提取后,arg 为 0x01020310(最后一个参数上一个地址),如果不设置为 NULL 的话,下面使用的话就得到未知结果,为了防止误操作,需要设置为NULL。

65620

C# 委托Func() 中 GetInvocationList() 方法使用 | 接收委托多个返回

在日常使用委托时,有以下常用方法 方法名称 说明 Clone 创建委托浅表副本。 GetInvocationList 按照调用顺序返回此多路广播委托调用列表。...RemoveImpl 调用列表中移除与指定委托相等元素 ---- GetInvocationList() 用途 当委托有多个返回时 当你编写一个 delegate委托 或 Func泛型委托...,并为实例绑定多个方法时,每个方法都有一个返回。...调用委托后,只能获取到最后一个调用方法返回。 ---- 使用 GetInvocationList()  GetInvocationList() 能够返回 这个委托方法链表。...通过使用循环,把每个方法顺序调用一次,每次循环中都会产生当前调用方法返回

2.6K20

C++】C++ 语言对 C 语言加强 ④ ( C 语言中三目运算符 - 不能作为左 | C++ 语言中三目运算符增强 | C 语言中三目运算符作为左使用 )

进行了增强 , C++ 中 , 三目运算符表达式 返回是一个 表达式 , 不是实际 , 而是表达式本身 ; 在 C++ 中 , 三目运算符 可以作为左使用 , 就是为 返回 表达式 赋值 ;...0; } 执行结果 : Maximum value : 30 a = 10 , b = 30 四、C 语言中 三目运算符 作为左使用 ---- C 语言 三目运算符 返回是计算完成之后 ,...因此 该返回 不能作为 左使用 , 不能被赋值 ; C++ 语言中 三目运算符 返回事 变量本身 , 本质是第一个地址 , 可以被赋值 , 既可以作为左 , 又可以作为右使用 ; 有个特殊情况..., 那么在 C 语言中 , 可以使用指针为该地址赋值 , 就可以作为左使用 ; 下面的代码中 , 令 三目运算符 返回 变量地址 , 然后使用 指针 为该地址赋值 , 即可实现 C++ 中三目运算符效果...a : b = 30; // 使用三目运算符获取 a 和 b 中最大 // 并且为 最大变量 再次赋值 为 30 // 令 三目运算符 返回 变量地址 // 然后使用 指针

24820

这行代码打印结果确实让人迷惑!

来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 上周在《来看一道"简单"C语言面试题》中分享了一道题,所谓纠正后代码也是漏洞百出,所幸读者在留言区已经指出,在这非常感谢...("%d\n%d\n%d\n%d\n",i,i+1,i++,i); return 0; } 思考一下,打印结果会是什么?...关于这一点,我在《你可能不知道printf》也有更多描述。 所以,传入参数,绝对不能依赖他们计算顺序。...拿本例来说,传入i++和i作为参数,无论计算顺序如何,都不应该影响最终结果,但是事实是,并非如此,因此导致了一个看起来很奇怪结果。 再次强调!不要写这样代码!不要写这样代码!不要写这样代码!...这才是现代C++单例模式简单又安全实现 关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源

41320

程序员C语言快速上手——基础篇(二)

C11,可见GCC编译器是非常厉害。...基本数据类型打印 在第一个示例中,我们已经使用printf函数打印了hello world,这里print是打印意思,那么f是什么意思呢?其实这里f是缩写,是format意思,代表格式化打印。...OS电脑上测试,64位GCC编译出来long输出是8字节,在其他类Unix操作系统上一致,可见Windows系统上C存在很多奇怪特殊现象。...声明变量没有预初始化为零,这是C语言一个缺陷!推荐良好编程范式,是在声明同时对变量进行零初始化。...建议在声明时都进行零初始化 1 int a = 0, b = 0, c = 10; 为什么在大量C教材中,都存在先声明,后初始化代码范例呢?

99430

C语言 -- printf 花式操作

1 从一个报错讲起 在上一篇文章中,我们使用C 语言在屏幕中输出了"Hello World!",但就printf这个函数而言,它使用却不只是这么简单。...在使用 gcc 进行编译时候会出现如下报错 ? 这个问题是因为printf用法不符合要求,那正确用法是什么样呢?...2.3 返回 如果函数调用成功,返回是实际打印字符数(不包含表示字符串结束 ‘\0’);如果函数调用失败,返回是一个负数 ?...2.4 使用示例 看了上面那么一大堆各种奇奇怪参数,是不是有点晕,让我们举个例子看看,或许会更好理解 ? 编译执行得到如下结果 ?...但反斜杠如果后边不带任何字符(直接换行),表示我们希望 C 语言将该行以及下一行看做是一个整体。 所以为了打印输出一条鱼,我们要将\n和\一起使用,具体代码如下 ? 执行结果如下图所示 ?

1.6K70

C++初始化坑你也遇到过吗?

, c :0 可以看到,三个变量都没有显式初始化,但a,c都被赋予了默认,而b是不确定。...只有第一个才是1,后面的全是0! 所以,这个坑其实是C++初始化列表坑,初始化列表定义中说明,如果初始化列表数量比定义数量少,那么未被定义到将会被赋予默认!...[i]); } 大家一定会觉得这段代码很简单,没错,打印结果就是都为0,的确很简单,但是,看下接下来代码: int buff_2[10]; memset(buff_2,1,sizeof(buff_2)...); for(int i = 0;i<10;i++) { printf("%d ",buff_2[i]); } 是的,变量类型变了,打印结果是: 16843009 16843009 16843009...16843009 16843009 16843009 16843009 16843009 16843009 16843009 是不是觉得很奇怪,接下来,我们把这句: printf("%d ",buff

43130

串口调试助手(CM野人版)4.0有严重Bug,已经跟作者反应,等候更新

但最近发现其一个严重Bug:版本就是 4.09 举个栗子: void functionPrint(void) { printf("Print this line....\n"); } void main() { //funcitonPrint(); } 本不应该再打印出任何东西,但奇怪是:Printf this line.依然能打印出来。...这里推荐个软件 secureCRT ,这个软件占用CPU资源非常少,售价高达 100 多美金。也用过友善调试助手,CPU资源占用率也非常高。...secure CRT 8.01 版本可以使用网上流传 7.3版本注册机进行注册。但易用性不如国产软件。 刚才经过测试,已经能重现Bug。 1、打开该软件,打开串口,屏幕上回打印出正确信息。...你会发现,打印出来并不是修改程序后打印信息,而是程序修改前打印信息。这就是本程序Bug所在。

45110

实例说明

这个经济使用资源原则使得C语言在嵌入式编程中非常流行,例如,为一个控制自动报警系统芯片编写程序。值得一提是,#include甚至不是C语言语句!...与C90分别要求31个字符和6个字符相比较,这是一个相当可观进步,而更旧编译器通常最多只允许8个字符。实际上,你使用字符数量可以超过规定最大,但是编译器不会识别额外字符。...; printf ("I am clang.cc\n"); printf ("My birthday is %d\n", num); 所有这些行都使用C语言一个标准函数:printf()。...最后一个 printf()行中又有一个奇怪问题:当输出这一行时 %d 起什么作用?回忆一下,这一行输出结果是: My birthday is 2014 喔!...带有返回 C语言函数要使用一个 return 语句,该语句包括关键字 return,后面紧跟着要返回,然后是一个分号。

1.4K80

【熟视C语言】C语言——带你深度刨析数据在内存中存储

(float *)&n;  printf("n为:%d\n",n);  printf("*pFloat为:%f\n",*pFloat);  *pFloat = 9.0;  printf("num...为:%d\n",n);  printf("*pFloat为:%f\n",*pFloat);  return 0; } (建议在查看结果之前自行思考三五分钟,思考一下大概是什么,想不出来没关系,...只是为以下讲解做铺垫) 前面我们说过,类型决定看待内存中存储内容角度,而这个例子中,开始,n是9,内存中是0x00 00 00 09;当以%d形式打印时是以整型角度来看待这块空间打印出来内容就是...9,而当以float类型取出,并以%f形式打印则以浮点型角度看待这块空间,打印出来是0.000000,对于同样大小空间,同样内容以两个不同角度看待,得到是不一样 同样,当我们使用float...类型去改变n中存储,虽然是同样大小数值,改变后内容却是和原来完全不一样,当我们再次以%d形式看待时会得出来一个非常奇怪,而当以%f形式看待时却会得到刚刚赋值9.0.

15020
领券