function TForm1.PrnOnline: Cardinal;
var
hPrinter: THandle;
pInfo: PPrinterInfo2;
bytesNeeded: DWORD;
begin
hprinter := GetCurrentPrinterHandle;
try
Winspool.GetPrinter(hPrinter, 2, nil, 0, @bytesNeeded);
pInfo := AllocMem(bytesNeeded);
try
Winspool.GetPrinter(hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded);
Result := pInfo^.Status;
finally
FreeMem(pInfo);
end;
finally
ClosePrinter(hPrinter);
end;
end;
function TForm1.GetCurrentPrinterHandle: THandle;
var
Device, Driver, Port : array[0..255] of char;
hDeviceMode: THandle;
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
if not OpenPrinter(@Device, Result, nil) then
RaiseLastWin32Error;
end;
Bu kodla yazıcının durumuna bakıyorum. Yazıcı bir hata veriyorsa (mesela kağıt bitmiş veya kapak açık) bana dönen değer 0 dan farklı olmalı. ama Her seferinde bana 0 dönüyor. Hatam nerde olabilir?
İlgili yazıcı windows ta kurulu mu? (Yani yazıcı sürücüleri kurulu mu)?
İlgili yazıcı varsayılan yazıcı olarak ayarlanmış mı?
Bu soruların cevabı EVET ise yazıcıdan kağıdı alın bir iş gönderin. Kağıt bitti uyarısı aldığınızdan emin olun. Fonksiyonu yaniden çağırın.
Bakalım ne olacak.
yazıcı xerox lazer ve windowsta kurulu. bağlantı doğru sınama sayfası alabiliyorum. tek kurulu yazıcı bu olduğundan varsayılan olarak atalı. yazıcıdan kağıdı çıkarıyorum baskı yolluyorum kağıt yok hatası windows veriyor ama ben yukarıdaki kodla hala 0 değeri okuyorum. yazıcı kapalı iken de denedim ama hala 0 dönüyor. yazıcının usb ile bağlı olması bunun sebebi olabilir mi?