使用获取打印机的
主要使用到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