spooler API研究——打印机任务截获和设置
2016-12-13 13:42
197 查看
直接上代码:
需包含头文件如下:
#include "Windows.h"
#include <WinSpool.h>
#pragma comment(lib, "Winspool.lib")
需包含头文件如下:
#include "Windows.h"
#include <WinSpool.h>
#pragma comment(lib, "Winspool.lib")
void ShowPrinterStatus() { HANDLE printerHandle; //打印机设备句柄 PRINTER_INFO_2* pPrinterInfo = NULL; while(1) { //检测打开打印机设备是否成功 if(!OpenPrinter(m_pPrinters->pPrinterName, &printerHandle, NULL)) { return; } DWORD nByteNeeded; DWORD nReturned; DWORD nByteUsed; //通过调用GetPrinter()函数得到作业数量 GetPrinter(printerHandle, 2, NULL, 0, &nByteNeeded); pPrinterInfo = (PRINTER_INFO_2*)malloc(nByteNeeded); GetPrinter(printerHandle, 2, (LPBYTE)pPrinterInfo, nByteNeeded, &nByteUsed); //通过调用EnumJobs()函数枚举打印任务 JOB_INFO_2* pJobInfo = NULL; EnumJobs(printerHandle, 0, pPrinterInfo->cJobs, 2, NULL, 0, (LPDWORD)&nByteNeeded, (LPDWORD)&nReturned); pJobInfo = (JOB_INFO_2*)malloc(nByteNeeded); ZeroMemory(pJobInfo, nByteNeeded); EnumJobs(printerHandle, 0, pPrinterInfo->cJobs, 2, (LPBYTE)pJobInfo, nByteNeeded, (LPDWORD)&nByteUsed, (LPDWORD)&nReturned); //检测当前是否有打印任务 if(pPrinterInfo->cJobs != 0) { //打印第一个任务 printf("%d:%s\n",pJobInfo[0].JobId,pJobInfo[0].pDocument); //将第一个任务挂起 SetJob(printerHandle,pJobInfo[0].JobId,2,NULL,JOB_CONTROL_PAUSE); } free(pPrinterInfo); //关闭打印机设备 ClosePrinter(printerHandle); Sleep(10); } }
相关文章推荐
- spooler API研究——获取所有本地和网络打印机
- spooler API研究——学习资料整理
- C#获取和设置系统的默认打印机,使用API
- spooler API研究——FindFirstPrinterChangeNotification和FindNextPrinterChangeNotification
- 继续打印功能的研究(1)发现,其他人使用API只是用代码向打印机中添加纸张类型
- 设置默认打印机
- Delphi Open Tools Api实例研究(二)
- 开源:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
- 开源:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
- 关于上篇修改打印机设置的补充.
- Delphi Open Tools Api实例研究(二)
- .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现(二)
- 设置打印机后台打印数据格式的几个办法
- 通过api和键盘钩子彻底屏蔽任务条和开始菜单。
- Delphi Open Tools Api实例研究(二)
- 98系统在word2000中设置粗体字,打印机正常打出来,windows 2000系统为什么打不出来?
- NET环境下有关打印页面设置、打印机设置、打印预览对话框的应用(二)
- Delphi Open Tools Api实例研究(一)
- Delphi Open Tools Api实例研究(一)
- Delphi Open Tools Api实例研究(二)