- A+
OpenPrinter操作网络打印机
在网络环境下,打印机被共享出来后,可以通过OpenPrinter命令来操作远程打印机。OpenPrinter是Windows系统所提供的一个API函数,其主要的作用是打开并获得一个指向打印机的句柄,通过该句柄可以对打印机进行操作,例如:打印文件、获取打印机状态等。
使用OpenPrinter命令需要传入的参数有两个,一个是指向打印机名字的指针,另一个是指向PRINTER_DEFAULTS的指针,PRINTER_DEFAULTS结构体是设置打印机参数的结构体。
示例:
HANDLE hPrinter;
PRINTER_DEFAULTS PrinterDefaults;
ZeroMemory(&PrinterDefaults, sizeof(PrinterDefaults));
PrinterDefaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE;
OpenPrinter(&PrinterName[0], &hPrinter, &PrinterDefaults);
上述示例中,PrinterName是一个字符数组,存储的是打印机的名称。PrinterDefaults结构体中的参数具体含义如下:
DefaultDataType:设置打印数据类型,默认值为RAW;
DesiredAccess:指定打印器句柄所需的访问权限,例如:PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE表示管理员权限和普通用户权限;
pDevMode:如果不为NULL,则将其用于打开打印机。如果打印机模式不可接受,则函数将失败并返回错误。
调用OpenPrinter成功后,返回一个HANDLE类型的句柄,可以通过这个句柄操作打印机,例如:打印文件。
示例:
DWORD dwError;
HANDLE hPrinter;
PRINTER_DEFAULTS PrinterDefaults;
DOC_INFO_1 DocInfo;
ZeroMemory(&PrinterDefaults, sizeof(PrinterDefaults));
PrinterDefaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE;
OpenPrinter(&PrinterName[0], &hPrinter, &PrinterDefaults);
ZeroMemory(&DocInfo, sizeof(DocInfo));
DocInfo.pDocName = &DocName[0];
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = &DataType[0];
StartDocPrinter(hPrinter, 1, (LPBYTE)&DocInfo);
StartPagePrinter(hPrinter);
if (WritePrinter(hPrinter, pData, dwCount, &dwBytesWritten) == FALSE)
{
dwError = GetLastError();
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
return dwError;
}
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
ClosePrinter(hPrinter);
上述示例中,pData为指向要打印的数据的指针,dwCount为pData指向的数据的大小,dwBytesWritten为实际写入的数据的大小。
在操作完打印机后,需要调用EndPagePrinter、EndDocPrinter和ClosePrinter函数来结束打印作业,并释放打印机句柄。
总结
使用OpenPrinter命令可以方便地对网络打印机进行操作,可以很好地满足在网络环境下的打印需求。通过掌握OpenPrinter命令的使用方法,可以实现更多的打印功能。