如何获取usb打印机状态?(200分)

  • 主题发起人 主题发起人 dbyoung
  • 开始时间 开始时间
D

dbyoung

Unregistered / Unconfirmed
GUEST, unregistred user!
如何获取usb打印机状态?
重谢。
 
我不知道你想取出什么状态。感觉不管什么打印机,如果取通用的状态,使用的命令和函数应该一样吧,系统交出来的应该和打印机无关,低层可能应该是打印机厂家提供的驱动去实现,返回系统的信息已经是一致的了。
 
我想知道打印机的:断电,缺纸,卡纸,等等情况.
普通的打印机我已经做到了,但USB打印机不知如何下手.
望高手指点.
 
你使用普通打印机的方式不能得到数据?
驱动安装好以后,打印机不应该有区别吧 ,
 
期待高手中..............
 
朋友:你知道普通并口在XP下获取打印机状态吗?能否告诉我?
谢谢帮忙!
CUI345@163.COM
 
帮 顶,学习中……
 
把你知道的告诉 别人,别人也会帮助你,这就是大富翁的精神,你知道并口在XP下获取打印机状态,请公布一下,让大家学习
 
这是LSUPER大侠写的代码:

uses Printers, WinSpool;

////////////////////////////////////////////////////////////////////////////////
//设计: Linc 2004.04.29
//功能: 判断打印机是否就绪
//参数:!! 可能是网络打印机
////////////////////////////////////////////////////////////////////////////////
function IsPrinterReady: Boolean;
var
hDeviceMode, hGlobal, hPrinter: THandle;
dwNeeded: DWord;
pDefs: TPrinterDefaults;
pInfo: PPrinterInfo2;
bFlag: Boolean;
cDevice,
cDriver,
cPort: array[0..255] of char;
begin
Result := False;
if Printer = nil then Exit;
if Printer.PrinterIndex = -1 then Exit;
hGlobal := 0;
try
Printer.GetPrinter(cDevice, cDriver, cPort, hDeviceMode);
if hDeviceMode = 0 then Exit;

FillChar(pDefs, SizeOf(TPrinterDefaults), 0);
pDefs.DesiredAccess := {STANDARD_RIGHTS_REQUIRED or} PRINTER_ACCESS_USE;
bFlag := OpenPrinter(cDevice, hPrinter, @pDefs);
dwNeeded := GetLastError;
if not bFlag or (hPrinter = INVALID_HANDLE_VALUE) then Exit;

FillChar(pInfo, SizeOf(pInfo), #0);
WinSpool.GetPrinter(hPrinter, 2, nil, 0, @dwNeeded);
if dwNeeded = 0 then Exit;

hGlobal := GlobalAlloc(GHND, dwNeeded);
if hGlobal = 0 then Exit;

pInfo := PPrinterInfo2(GlobalLock(hGlobal));
if pInfo = nil then Exit;

bFlag := WinSpool.GetPrinter(hPrinter, 2, pInfo, dwNeeded, @dwNeeded);
if bFlag then
Result := pInfo.Status = 0
else Result := False;
finally
if pInfo <> nil then GlobalUnlock(hGlobal);
if hGlobal <> 0 then GlobalFree(hGlobal);
if hPrinter <> 0 then ClosePrinter(hPrinter);
end;
end;
 
不过你得到的Status一般情况下是不会变的。这是由于Windows在做打印机的时候,有一个缓存。因为如果没有缓存的话,每次访问打印机很慢。微软的技术人员也没办法

不过我倒以为,微软可能是为了兼容以前的慢的打印机才这样做的。现在的打印机其实很快的了。唉...不能与时俱进啊。
 
现在关于USB接口的资料特别是中文的不怎么多
楼主自己搜点资料研究研究
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
890
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
949
DelphiTeacher的专栏
D
后退
顶部