使用获取打印机的

电工电气2021年09月06日

主要使用到v中的EnumPrinters函数,代码如下:

[DllImport(\"v\", SetLastError = true, CharSet = to)]

[return: MarshalAs(ol)]

private static extern bool EnumPrinters ([MarshalAs(UnmanagedType.U4)] PRINTER_ENUM flags,

[MarshalAs(Str)] string sName,

uint iLevel,

IntPtr pPrinterDesc,

uint iSize,

[MarshalAs(UnmanagedType.U4)] ref uint iNeeded,

[MarshalAs(UnmanagedType.U4)] ref uint iReturned

);

说明:Marshal属性提供了对托管代码与非托管代码见数据封送。

EnumPrinters 的 WIN32 API的定义如下:

BOOL EnumPrinters(

DWORD Flags, // printer object types

LPTSTR Name, // name of printer object

DWORD Level, // information level

LPBYTE pPrinterEnum, // printer information buffer

DWORD cbBuf, // size of printer information buffer

LPDWORD pcbNeeded, // bytes received or required

LPDWORD pcReturned // number of printers enumerated

);

问题又来啦,EnumPrinters通过Level来获取PRINTER_INFO,而能获得打印机驱动的是PRINTER_INFO_2,而C#中又没有PRINTER_INFO_2结构,偶又开始晕了。。。。。

查了半天资料,上基本上都是PRINTER_INFO_1的定义,而PRINTER_INFO_2不同与PRINTER_INFO_1,其中还包括DEVMODE结构,非托管的结构套结构,偶开始飘了~~~~

最后发现与其在C#中定义结构来对应非托管的结构,还不如直接用类来替代。所以定义了两个类

PRINTER_INFO_2以及DEVMODE(注:由于PRINTER_INFO_2中只用到了DEVMODE结构来接收打印机驱动的信息,所以只定义了这个类,对于其他类都没有做具体实现)。

在PRINTER_INFO_2中,对于所有的DWORD类型数据,全部对应到Int32类型上面,而对于所有LPTSTR、LPDEVMODE以及PSECURITY_DESCRIPTOR一律对应到IntPtr指针类型。

为了获取非托管中的数据,使用了一下函数获取打印机信息

.

PRINTER_INFO_2 pi = new PRINTER_INFO_2();

//把数据从非托管内存传送到到托管内存

for(int i = 0; i numPrinters; i++)

{

rToStructure( prInfo, pi ); //prInfo是由上面EnumPrinters获得的打印机

string driver = rToStringAuto( riverName );

if ( printerdriver == \"\" Lower().IndexOf( printerdriver ) != -1)

{

// 做相关处理

}

prInfo = new IntPtr(Int32() + zeOf(typeof(PRINTER_INFO_2))); // 获取下一个打印机信息段开始

他认为 }

.

问题至此基本解决。但C#中对非托管函数的调用,以及相互之间的数据封装还是一个比较难的地方,有空还需要整理一下。

文章来源:

补充:在2.0中,fixed关键字可以用于定义一个固定大小的数组缓存,而不是像1.x中那样还需要定义一个数字大小。但这种方式只能用于结构(struct)而不能用于类(class)的定义

昆明宫颈糜烂哪家好
海口白癜风医院
一品红
相关阅读
精彩绝伦!首回合四比三,曼城顶入,皇家马德里还有戏

欧洲各国顶级足罚球现在来到了赛季尾声,当然收到世人推崇的欧联也不都只...

2024-09-05
吹拉弹颂唱响曲(二)——观赏《往日国乐》两年情思小结

原文 / 米木桥 吹拉枪弹诗天天向上歌 —游玩《日星西乐》两年情思小结 20...

2024-05-05
2022二级建造师《建设工程法律法规及相关知识》真题答案及解析

2022二级建造师《工程工程项目法规及之外经验》真题诗究竟及解 一、每项选...

2023-12-07
妈妈本想给宝宝拍大片,谁曾想宝宝的小步伐亮了,网友:实在太可爱了

记录海绵的成长历程是每一个幼儿都只想做的事情。幼儿们也善用了很多分析...

2023-11-23
美股短线跳水,三大股指尽数转跌

铝媒体 App 5月20日第一时间,美股短线艺术体操,三大期货剩余转跌。截至目...

2023-11-22
Aspex Management (HK) Limited平安保险美兰空港(00357)49.3万股

香港联交所最新资料显示,7同年5日,Aspex Management (HK) Limited年末美兰空港(00...

2023-11-18
友情链接