为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2020-10-22 2页 doc 40KB 61阅读

用户头像 个人认证

蓝蓝的天

暂无简介

举报
C#获取打印机状态+API函数详解usingSystem;using;using;using;using;using;using;usingtestprinter2{publicpartialclassForm1:Form{#region预定义类型[FlagsAttribute]publicenumPrinterEnumFlags{PRINTER_ENUM_DEFAULT=0x00000001,PRINTER_ENUM_LOCAL=0x00000002,PRINTER_ENUM_CONNECTIONS=0x00000004,PRINTER_ENUM_FAVOR...
C#获取打印机状态+API函数详解
usingSystem;using;using;using;using;using;using;usingtestprinter2{publicpartialclassForm1:Form{#region预定义类型[FlagsAttribute]publicenumPrinterEnumFlags{PRINTER_ENUM_DEFAULT=0x00000001,PRINTER_ENUM_LOCAL=0x00000002,PRINTER_ENUM_CONNECTIONS=0x00000004,PRINTER_ENUM_FAVORITE=0x00000004,PRINTER_ENUM_NAME=0x00000008,PRINTER_ENUM_REMOTE=0x00000010,PRINTER_ENUM_SHARED=0x00000020,PRINTER_ENUM_NETWORK=0x00000040,PRINTER_ENUM_EXPAND=0x00004000,PRINTER_ENUM_CONTAINER=0x00008000,PRINTER_ENUM_ICONMASK=0x00ff0000,PRINTER_ENUM_ICON1=0x00010000,PRINTER_ENUM_ICON2=0x00020000,PRINTER_ENUM_ICON3=0x00040000,PRINTER_ENUM_ICON4=0x00080000,PRINTER_ENUM_ICON5=0x00100000,PRINTER_ENUM_ICON6=0x00200000,PRINTER_ENUM_ICON7=0x00400000,PRINTER_ENUM_ICON8=0x00800000,PRINTER_ENUM_HIDE=0x01000000}[StructLayout]publicstructPRINTER_INFO_2{[MarshalAs]publicstringpServerName;[MarshalAs]publicstringpPrinterName;[MarshalAs]publicstringpShareName;[MarshalAs]publicstringpPortName;[MarshalAs]publicstringpDriverName;[MarshalAs]publicstringpComment;[MarshalAs]publicstringpLocation;publicIntPtrpDevMode;[MarshalAs]publicstringpSepFile;[MarshalAs]publicstringpPrintProcessor;[MarshalAs]publicstringpDatatype;[MarshalAs]publicstringpParameters;publicIntPtrpSecurityDescriptor;publicuintAttributes;publicuintPriority;publicuintDefaultPriority;publicuintStartTime;publicuintUntilTime;publicuintStatus;publicuintcJobs;publicuintAveragePPM;}#endregion#region引用WindowsAPIPrinterName+"驱动为:"+Info2[i].pDriverName);"");}(pAddr);}DriverName,"有",0);}}ofbytescopied(orrequired)LPDWORDpcReturnedofprinterinfo.structurescopied);这个API用于了解可用的打印机的信息参数的意义是:Flags:可以是PRINTER_ENUM_LOCAL,PRINTER_ENUM_NAME,PRINTER_ENUM_SHARED,PRINTER_ENUM_DEFAULT,PRINTER_ENUM_CONNECTIONS等或者某些合法的组合Name:与Flag相关的名字,例如,服务器名,域名等Level:您希望返回的结构类型,95可以用1,2,5,NT可以用1,2,4,5分别代PRINTER_INFO_1,PRINTER_INFO_2,PRINTER_INFO_4,PRINTER_INFO_5各个结构的不同点是返回信息的详尽程度或者用途不同pPrinterEnum:您提供的一个接受返回结果的缓冲区cbBuf:这个缓冲区的大小(inBytes)pcbNeeded:您提供的空间,API调用返回时,将告诉您用了pPrinterEnum多少字节(成功时),或者需要多少字节(如果空间不够)pcReturned:您提供的空间,API调用返回时,将告诉您到底返回了多少个level中要求的结构EnumPrinters返回非零值表示调用成功.EnumPrintersEnumPrintersVB声明DeclareFunctionEnumPrintersLib""Alias"EnumPrintersA"(ByValflagsAsLong,ByValnameAsString,ByValLevelAsLong,pPrinterEnumAsByte,ByValcdBufAsLong,pcbNeededAsLong,pcReturnedAsLong)AsLong说明枚举系统中安装的打印机返回值Long,非零表示成功,零表示失败。会设置GetLastError参数表参数类型及说明flagsLong,一个或多个下述标志PRINTER_ENUM_LOCAL枚举本地打印机(包括Windows95中的网络打印机)。名字会被忽略PRINTER_ENUM_NAME枚举由name参数指定的打印机。其中的名字可以是一个供应商、域或服务器。如name为NULL,则枚举出可用的打印机PRINTER_ENUM_SHARE枚举共享打印机(必须同其他常数组合使用)PRINTER_ENUM_CONNECTIONS枚举网络连接列表中的打印机(即使目前没有连接——仅适用于NT)PRINTER_ENUM_NETWORK枚举通过网络连接的打印机。级别(Level)必须为1。仅适用于NTPRINTER_ENUM_REMOTE枚举通过网络连接的打印机和打印服务器。级别必须为1。仅适用于NTnameString,vbNullString表示枚举同本机连接的打印机。否则由标志和级别决定LevelLong,1,2,4或5(4仅适用于NT;5仅适用于Win95和NT),指定欲枚举的结构的类型。如果是1,则name参数由标志设置决定。如果是2或5,那么name就代表欲对其打印机进行枚举的服务器的名字;或者为vbNullString。如果是4,那么只有PRINTER_ENUM_LOCAL和PRINTER_ENUM_CONNECTIONS才有效。名字必须是vbNullStringpPrinterEnumByte,包含PRINTER_ENUM_x结构的缓冲区,其中的x代表级别(Level)cbBufLong,pPrinterEnum缓冲区中的字符数量pcbNeededLong,指向一个Long型变量的指针,该变量用于保存请求的缓冲区长度,或者实际读入的字节数量pcReturnedLong,载入缓冲区的结构数量(用于那些能返回多个结构的函数)注解第4和第5级将它们的结构建立在系统注册表的基础上,而且比第2级快得多。后者要求每台打印机都处于打开状态C#中Typeof是干什么的2011-10-2106:39匿名|分类:编程语言|浏览5704次提问者采纳2011-10-2107:25C#typeof()和GetType()区是什么?1、typeof(x)中的x,必须是具体的类名、类型名称等,不可以是变量名称。2、GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型。比如有这样一个变量i:Int32i=newInt32();()返回值是Int32的类型,但是无法使用typeof(i),因为i是一个变量,如果要使用typeof(),则只能:typeof(Int32),返回的同样是Int32的类型。C#中int和IntPtr相互转换inti=12;intmyi=(int)p;inti=12;intmyi=(int)p; ());IntPtr问publicaaa(IntPtrmyPtr,intleft,inttop,intwidth,shortheight)这里myPtr应该是对应到一块内存,你需要查看aaa函数是如何把myPtr转化成它内部要使用的结构体的(一般都是结构体,也可能是其它对象,比如数组)。然后,你需要在你的托管代码中,定义该结构体,使用StructLayout特性,对结构体的字段使用MarshalAs特性,类似这样:[StructLayout,CharSet=,Size=13)]publicstructA101220Output{[MarshalAs,SizeConst=11)]publicstringTransactionAccountID;[MarshalAs,SizeConst=2)]publicstringIsAuthenticated;}然后在需要使用的地方,获取该结构体对象的IntPtr,如下:buffer,0,0,640,480);}finaly{ET中char总是Unicode,而缺省情况下char会被Marshal成8位的Ansi字符,因此结果不同。反之,如果我们指定这个char被Marshal成short值(也就是UTF16),如下:1:[StructLayout]2:structMyStruct3:{4:[MarshalAs]5:charb;6:}那么sizeof和结果均为2。MarshalAs这个Attribute可以影响的结果,而不能影响sizeof的结果。一个有意思的情况是,如果值类型不含任何成员,如下:1:structMyStruct2:{3:}Sizeof和结果均为1,而不是0。这个结果和C++的结果是一致的。原因很简单:如果声明一个这样的数组,如果元素大小为0的话,那么每个元素都具有相同的地址,这是不为C++所允许的,和正常的非0的情况也不一致。.NET在这里采用和c++相同的,也认为空的值类型大小为1。最后需要注意的是,如果MyStruct是:1:structMyStruct<T>2:{3:Ta;4:}如果对传入MyStruct<>或者MyStruct<int>这样的类型,则抛出ArgumentException,因为完全不支持泛型。这个是历史遗留问题,从本质上来讲实例化的模板类型(MyStruct<int>)应该是支持的,据说当时主要是没有时间加上对模板的支持。同样的,sizeof也不支持模板类型,而且连MyStruct<int>这样子的类型也不支持。C#编译器会对sizeof(MyStruct<int>)报错:errorCS0208:Cannottaketheaddressof,getthesizeof,ordeclareapointertoamanagedtype('')#region和#endregion是什么2012-11-1016:30:57|分类:默认分类|标签:|字号大中小订阅用来注释中间代码的作用而且在其他地方用到中间的类和方法都会有你标注的注释本身不参与编译还可以缩进代码方便阅览折叠代码#region使您得以在使用VisualStudio代码编辑器的大纲显示功能时指定可展开或折叠的代码块。#regionname其中:name希望给予将出现在VisualStudio代码编辑器中的区域的名称。备注必须用#endregion指令终止#region块。#region块不能与#if块重叠。但是,可以将#region块嵌套在#if块内,并且可以将#if块嵌套在#region块内。示例//#regionMyClassdefinitionpublicclassMyClass{publicstaticvoidMain(){}}
/
本文档为【C#获取打印机状态+API函数详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索