yazıcı durumu kontrolü?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

yazıcı durumu kontrolü?

Mesaj gönderen cfyasar »

Kod: Tümünü seç

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?
öğrenmek, zorlukları yenmektir.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

işletim sisteminiz xp ise kodlar çalışmayabilir.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

İ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.


Not:Fonksiyonun çağırdığı API ler WinXP (ve hatta Vista)da çalışıyor.
M$ öle demiş http://msdn.microsoft.com/library/defau ... l_1gky.asp
Kullanıcı avatarı
cfyasar
Üye
Mesajlar: 169
Kayıt: 31 Oca 2005 05:18
Konum: izmir

Mesaj gönderen cfyasar »

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?
öğrenmek, zorlukları yenmektir.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Enteresan;

Kod: Tümünü seç

 Winspool.GetPrinter(hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded);
Bu fonksiyon 0 döndürüyor ise yazıcı bilgisi okunamıyor olmalı. Fakat nedeni hakkında bir şey söylemek zor.
Cevapla