高手请进!!!高分送出

wkzjl 2003-04-04 02:41:33
下面是程序的原代码
---------------------------------------------------------------
Pinfo:pPRINTERINFO2;
pprt:Cardinal;
b:PDWORD;
a:Integer;
begin
a:=3000;
Pinfo:=AllocMem(a);
b:=AllocMem(1000);

// 打开打印机
if OpenPrinter('Star AR-3200+',pprt,nil ) then
begin
// 得到当前打印机信息
if GetPrinter(pprt,2,Pinfo,a,b) then
ShowMessage(Pinfo.pPrinterName+' Status--'+IntToStr(Pinfo.Status));
// 关闭打印机
ClosePrinter(pprt);
end;
FreeMem(Pinfo);
FreeMem(b);

end;

---------------------------------------------------------------------
为什么我得到的Status值总是0;
在线等待!!!!!!!!!!!
...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdcnow 2003-04-04
  • 打赏
  • 举报
回复
to wkzjl (w.kzjl) :
你的代码我分析不出原因,不过用上面那个就可以了.有什么问题给我发短信.
zdcnow 2003-04-04
  • 打赏
  • 举报
回复
很多公司都是用共享打印机的.
各位可以用这个来查看打印机现在在干什么,别人现在在打印什么东西

呵呵
别乱来哦.
zdcnow 2003-04-04
  • 打赏
  • 举报
回复
以下代码可以查看打印机状态,如果打印机有打印任务,显示前20个打印任务.
可以用在网络或者本地打印机上.

//得到本机或者网络上共享打印机的状态
//author:ginsonic
//zdcnow download from E-E

use winspool;

function PrinterStatusText(Status: Integer): String;
begin
case Status of
0: Result := 'Waiting';
JOB_STATUS_PAUSED: Result := 'Paused';
JOB_STATUS_ERROR: Result := 'Error';
JOB_STATUS_DELETING: Result := 'Deleting';
JOB_STATUS_SPOOLING: Result := 'Spooling';
JOB_STATUS_PRINTING: Result := 'Printing';
JOB_STATUS_OFFLINE: Result := 'Offline';
JOB_STATUS_PAPEROUT: Result := 'Paper Out';
JOB_STATUS_PRINTED: Result := 'Printed';
JOB_STATUS_DELETED: Result := 'Deleted';
JOB_STATUS_BLOCKED_DEVQ: Result := 'Blocked';
JOB_STATUS_USER_INTERVENTION: Result := 'User Intervention';
JOB_STATUS_RESTART: Result := 'Restart';
else Result := 'Status ' + IntToStr(Status);
end;
end;

procedure GetJobs(PrinterName: String; JobList: TStrings);
const
InfoLevel = 1;
FirstJob = 0;
LastJob = 19;
var
Jobs: array [FirstJob..LastJob] of TJobInfo1;
PrinterHandle, BytesNeeded,NumJobs:Cardinal;
I: Integer;
begin
if OpenPrinter(PChar(PrinterName),PrinterHandle,nil) then
begin
if EnumJobs(PrinterHandle,FirstJob,LastJob+1,InfoLevel,@Jobs,SizeOf(Jobs),BytesNeeded,NumJobs) then begin
JobList.Clear;
for I := 0 to NumJobs-1 do
with Jobs[I] do
JobList.Add(Format('%s(%s)',[StrPas(pDocument),PrinterStatusText(Status)]));
end;
ClosePrinter(PrinterHandle);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//放个memo1来显示状态和打印任务,注意改为你的打印机路径和名称
GetJobs('Star AR-3200+',Memo1.Lines);
end;
ljyt 2003-04-04
  • 打赏
  • 举报
回复
Openprinter不能用到win98和win2000以上。

1,184

社区成员

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

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