打印机状态(200分)

  • 主题发起人 主题发起人 henry3
  • 开始时间 开始时间
H

henry3

Unregistered / Unconfirmed
GUEST, unregistred user!
IF GetPrinter( PHD, 2, @InfoBuffer, SizeOf(InfoBuffer), @pcbNeeded ) then
begin
Move ( InfoBuffer,Info,SizeOf(Info));
LServerName.Caption := Info.pServerName;
LPrinterName.Caption := Info.pPrinterName;
LShareName.Caption := Info.pShareName;
LPortName.Caption := Info.pPortName;
LDeviceName.Caption := Info.pDriverName;
Lcomment.Caption := Info.pComment;
LJobs.Caption := IntToStr ( Info.cJobs);
LData.Caption := Info.pDatatype;
Label7.Caption := inttostr(info.status);
end;

这个info.status总是0,怎么回事?
 
试试:
function PrinterStatus : integer;
asm
mov ah, 2 // function 2 - returns status of port
mov dx, 0 // lpt1 = 0, lpt2 = 1 etc
int $17 // status in ah
mov al, ah
and eax, $FF // status now in eax with top 24 bits cleared
end;

const
PrinterCodes : array [0..7] of string =
('printer timed-out',
'unused',
'unused',
'I/O error',
'printer selected',
'out of paper',
'printer acknowedgment',
'printer not busy');

procedure TForm1.Button1Click(Sender: TObject);
var
L,P : integer;
begin

P := PrinterStatus;
//status of printer in P
ListBox1.Clear;
for L := 0 to 7do

if P and (1 shl L) <> 0 then

ListBox1.Items.Add (PrinterCodes [L]);
end;
 
wulianmin
我测试了你的方法,在 win2000下执行 int $17 出错!请问是什么原因
 
类似[int $17](打印相关) [int $14](串行口相关)
直接访问 BIOS 的指令, 应该只能在do
S/WIN95/98 中使用,
在win2000下执行此指令必须获得最高的指令优先级, 很麻烦, 不划算
 
USB打印机能用吗?
 
接受答案了.
 
后退
顶部