获取打印机正在打印或已经的内容?该如何处理
发布时间: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)
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
C#项目中如何更改项目保存的文件夹名?
求解。。
------解决方案--------------------
好像需要重构吧,同样求高人解答。
------...
-
C#中让TextBox只能输入数字的问题
我用的如下的代码:
static private Regex r = new Regex("^[0-9]{1,}$ ");
...
-
带数据库的程序打包注意什么?
打的包出错:Error:System.InvalidOperationException: ExecuteReader 要求已打开且可用的连接。连接的...
-
想学习一下网络程序开发 请给推荐几本书
学习基于http协议的程序开发 比如获取网页 分析网页 模拟网页操作 下载上传文档等知识 ...
-
qq的安装包是用什么工具?
想用.net制作一个想qq一样比较漂亮的安装包。有例子最好
------解决方案--------------------
新建->安...
-
C# 写的windows服务 调用 C++ dll 的问题
我封装了一个dll
用一个普通的winform程序 调用的时候没 问题。
但是放在C#写的服务程...
-
在VS2005中怎么调出 解决方案 那个图标?(图示)求解释~~~
这是我用的VS
这是我在教学视频上看到的VS
------解决方案------------...
-
寻友
有人在自学c#编程吗,可以互相认识一下,以后共同探讨学习中的问题……
------解决方案--------------------
朋友多了,路好走~
...
-
急!急!急!C#代码
怎样将数据库中的数据动态加载到Treeview控件中
------解决方案--------------------
C# code
void CreateTree(T...
-
救急??????????????????
哪位高手帮我一下,在C#中怎么写关于鼠标和键盘监听事件,我的程序就差监听鼠标和键盘是否动,然后定时关机这个功能了,请高手指点,...