C# 关于打印机的监视

本文讲述了在C#环境下如何实现对Windows打印机状态的监视,特别是如何利用.NET 4.0平台和Spooler API进行交互。作者分享了从C++ API到C#的转换过程,探讨了结构体和内存对齐的问题,并引用了codeproject上的相关文章作为参考,以解决在x64平台上遇到的问题。

由于工作原因,需要监视打印机状态(windows 上spooler),然后做取得一些关于打印机操作。

在VC++平台,问题很好解决,也有很好的平台解决方案,但是苦于要做成Windows Service和大量平台多线程处理(线程池),还有Tcp通信,xml配置等等,在C++上实现,我的编码效率低,用C#利用微软成熟的.net 4.0平台,时装比较快,我就采用了C# 来实现,但是问题来了,大量的spooler API 都是VC时代winAPI的非托管代码,怎用托管代码调用成了我一个棘手问题,因为业务是和打印机相关,C#关于打印机交互的接口我又不是很了解(不知道能不能实现),我就选择了折中方案,也是个危险的方案,就是用Marshal来解决问题。一旦解决不好,C#再好没鸟用,还得用C++,下面就是我查找和学习过程。

首先找到我基本要的调用的C++关于打印机winAPI都有哪些

在这里找:C++

#include <winspool.h>
#pragma comment(lib, "winspool.lib")

主要有一下进入winspool.h,有以下东东

BOOL
WINAPI
OpenPrinterW(
_In_opt_    LPWSTR             pPrinterName,
_Out_       LPHANDLE            phPrinter,
_In_opt_    LPPRINTER_DEFAULTSW pDefault
);

HANDLE
WINAPI
FindFirstPrinterChangeNotification(
_In_     HANDLE hPrinter,
         DWORD  fdwFilter,
         DWORD  fdwOptions,
_In_opt_ PVOID  pPrinterNotifyOptions
    );

BOOL
WINAPI
FindNextPrinterChangeNotification(
_In_        HANDLE hChange,
_Out_opt_   PDWORD pdwChange,
_In_opt_    LPVOID pvReserved,
_Out_opt_   LPVOID *ppPrinterNotifyInfo
    );

BOOL
WINAPI
FindClosePrinterChangeNotification(
_In_   HANDLE hChange
    );

BOOL
WINAPI
ClosePrinter(
_In_ HANDLE hPrinter
);

这都是啥呢,参见微软:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd162723(v=vs.85).a

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值