请问怎么获取网络打印机的状态? ( 积分: 100 )

  • 主题发起人 主题发起人 xl4772
  • 开始时间 开始时间
X

xl4772

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在windows的“添加打印机”里面添加了网络打印机后,网络打印机的状态有体现,比如准备就绪,打开,无法连接,那么怎么在delphi程序得到?
 
没人知道吗?[:(]
 
这是别人的一段代码,看有没有用
uses Winspool, Printers; //枚举打印任务:
function TPrintMai_frm.getjob(): integer;
var
Needed, Returned: DWORD;
i, Count: integer;
tbt: byte;
pNeeded: PDword;
P2: PJobInfo1;
PPI: pPRINTERINFO2;
Printer: TPrinter;
Device, Driver, Port: array[0..255] of Char;
PPr, DevMode: Cardinal;
hPrinter: THandle;
begin
result := 0;
Printer := TPrinter.Create; //创建Printer对象
try
Printer.GetPrinter(Device, Driver, Port, DevMode);
//取得打印机的名称,驱动程序,端口号
if not OpenPrinter(@device, hPrinter, nil) then //取得打印机的句柄
begin
ShowMessage('OpenPrinter' + SysErrorMessage(GetLastError));
//Exit;
end;
PNeeded := AllocMem(8024); //分配内存空间
P2 := AllocMem(8048);
PPI := AllocMem(8048); //接受打印机信息结构
if not GetPrinter(hPrinter, 2, PPI, 8048, PNeeded) then
//取得打印机队列中的任务数
begin
ShowMessage('GetPrinter' + SysErrorMessage(GetLastError));
end; //取得打印机状态
if Enumjobs(hPrinter, 0, 1, 2, p2, 8048, Needed, Returned) then
begin
if P2.JobId = 0 then
result := 0;
if P2.JobId > 0 then
begin
result := PPI.cJobs;
end
end
else
ShowMessage('Enumjobs' + SysErrorMessage(GetLastError));
//关闭打印机,释放内存空间
finally
FreeMem(PNeeded);
FreeMem(p2);
FreeMem(PPI);
Printer.Free;
ClosePrinter(hPrinter);
end;
end;
 
这是常用的方法:
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
FormInfo : TFormInfo1;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');
把网络打印机当成本地机用就行
 
to xiongw :
不行的啊
ShowMessage('GetPrinter' + SysErrorMessage(GetLastError));得不到打印机的状态
怎么象出错啊?!
OpenPrinter(PrintDevice, hPrinter, nil); 会报出错!
 
怎么获取本地打印机的状态?
 
多人接受答案了。
 
后退
顶部