专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++ Builder

获取打印机正在打印或已经的内容?该如何处理

发布时间:2011-06-28 12:17:00 文章来源:www.iduyao.cn 采编人员:星星草
获取打印机正在打印或已经的内容?
一台打印机在打印文档或发票,如何另外写个程序获取打印机正在打印或已经的内容?
我熟悉bcb和VB,请各位高手指点指点!

------解决方案--------------------
/***************************************************************************/
/////////////////////////////////////////////////////////////////////////////
//函数名: Execute()
//功能说明:线程的执行函数,获得打印机的当前打印作业名及正在打印的页码.
// 并通知管理系统.
//参数:
//返回值:
/////////////////////////////////////////////////////////////////////////////
void __fastcall TthrdPrint::Execute()
{
//---- Place thread code here ----
BOOL bRval = 0;
HANDLE pHandle = NULL; //打印机句柄
JOB_INFO_2 *pJob = NULL; //打印机任务信息
DWORD dwNeeded, dwReturned;
AnsiString asMsg, asRptName, asTemp;
char cMsg[200]; //消息
DWORD iPrinted; //已打印的页数
AnsiString asDocName; //正在打印的文档名
String NodeName; //节名称字符串
String KeyName; //键名称字符串
char DefaultString[256]; //在键名没有找到时默认返回的字符串
char ReturnedString[256]; //在键名找到时返回的字符串

try
{
//取得默认的打印机名
NodeName = "windows "; // 节名称
KeyName = "device "; // 键名称
strcpy(DefaultString, "Unknown ");
GetProfileString(
NodeName.c_str(),
KeyName.c_str(),
DefaultString,
ReturnedString,
sizeof(ReturnedString));
asTemp = AnsiString(ReturnedString);
asTemp =asTemp.SubString(1, asTemp.Pos( ", ") - 1);
if(asTemp == " ")
{
memset(cMsg, 0x00, 200);
strcpy(cMsg, "报表服务机上没有默认打印机! ");
frmReportMain-> Udp-> SendBuffer(cMsg, 200, strlen(cMsg));
bRval = ClosePrinter(pHandle);
return;
}

//打开打印机
bRval = OpenPrinter(asTemp.c_str(), &pHandle, NULL);
if(!pHandle) return;
//while(!this-> Terminated)
{
//枚举该打印机中的作业队列
bRval = EnumJobs(pHandle, // handle to printer object
0, // location of first job in print queue to enumerate
1, // number of jobs to enumerate
2, // structure level
NULL, // pointer to structure array
0, // size of array, in bytes
&dwNeeded, // addr. of variable with no. of bytes copied (or required)
&dwReturned // addr. of variable with no. of job info. structures copied
);
if(!dwNeeded) //没有作业
{
memset(cMsg, 0x00, 200);
asDocName = asDocName + ":打印完毕! ";
strcpy(cMsg, asDocName.c_str());
frmReportMain-> Udp-> SendBuffer(cMsg, 200, strlen(cMsg));
bRval = ClosePrinter(pHandle);
return;
}
pJob = (JOB_INFO_2 *)malloc(dwNeeded);
bRval = EnumJobs(pHandle, // handle to printer object
0, // location of first job in print queue to enumerate
1, // number of jobs to enumerate
2, // structure level
(LPBYTE)pJob, // pointer to structure array
dwNeeded, // size of array, in bytes
&dwNeeded, // addr. of variable with no. of bytes copied (or required)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: