请问各位高手:怎样检测该机器是否有打印机和怎样访问打印队列?

xiaoguoru 2003-04-15 01:32:34
同上。
...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishiping 2003-04-15
  • 打赏
  • 举报
回复
OpenPrinter 的第一个参数是打印机的名称。上面的 Printer()->Printers->Strings[
Printer()->PrinterIndex] 就是系统选择的缺省的打印机名称。如果想要枚举其它的打
印机队列,只要更改OpenPrinter的第一个参数就可以了。打印机的名字可以从Printer()
->Printers->Strings[Index]取得(Index是打印机的序号,从0开始)。
jishiping 2003-04-15
  • 打赏
  • 举报
回复
1、该机器是否有打印机?
使用 Printer()->Printers->Count>0 判断是否有打印机。

2、访问当前选择的打印机的打印队列,主要使用API函数EnumJobs枚举。下面是一个例子:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD dwNum;
DWORD dwSize;
HANDLE hPrinter;
char buf[1024];
JOB_INFO_1* pji;

if (!OpenPrinter(Printer()->Printers->Strings[
Printer()->PrinterIndex].c_str(),&hPrinter,
NULL)) {
ShowMessage(SysErrorMessage(GetLastError()));
return;
}
Memo1->Clear(); pji = (JOB_INFO_1*)buf;
for(int n=0; 1; n++) {
if (!EnumJobs(hPrinter,n,1,1,buf,sizeof(buf),
&dwSize,&dwNum) || dwNum==0)
break;
if (n!=0) Memo1->Lines->Add("");
Memo1->Lines->Add(AnsiString("Job ")+n);
Memo1->Lines->Add(AnsiString("UserName: ")+
pji->pUserName);
Memo1->Lines->Add(AnsiString("Document: ")+
pji->pDocument);
Memo1->Lines->Add(AnsiString("Status: ")+
pji->pStatus);
Memo1->Lines->Add(AnsiString("TotalPages: ")+
pji->TotalPages);
Memo1->Lines->Add(AnsiString("PagesPrinted: ")+
pji->PagesPrinted);
}
ClosePrinter(hPrinter);
}

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧