2011-11-17 14 views
7

Bir yazıcının Çevrimiçi/çevrimdışı BEFORE yazdırmaya çalışıp çalışmadığını tespit etmek istiyorum. Çevrimdışıysa - yazdırma iletişim kutusu Görünür olmayacaktır.Bağlı bir USB yazıcının açık veya kapalı olup olmadığını nasıl algılayabilirim?

vb Win32 API "OpenPrinter" biriktirici kuyruğuna, yazıcının kendisinden ziyade çalışmıyor gibi görünüyor ve sadece whichis çok geç, bir belge gönderilir SONRA Yazıcı çevrimdışı bildirir.

QUESTION: Bir yazıcının bir baskı göndermeden çevrimdışı/çevrimiçi olup olmadığını nasıl anlarım?

DÜZENLEME: Bu mümkün olduğunu düşünmüyorum

Offline - printer is turned off 
OnLine - printer is turned On 
+0

Bu sorunun amacı için çevrimiçi/çevrimdışı ne anlama geliyor? Çevrimdışı bağlantısı kesiliyor mu, yoksa bu şekilde yakalamak isteyebileceğiniz başka bir durum var mı? – 0xC0000022L

cevap

0

.

Daha önce de belirttiğiniz gibi, bu biriktirici kullanılarak biriktirilmiştir ve biriktirici durumu her zaman yazıcı durumunu yansıtmaz.

Bu, Windows'daki tasarım gereğidir.

Sadece belirli bir yazıcı türüne sahipseniz, USB'ye bağlıysa sorgulayabilirsiniz.

+0

http://stackoverflow.com/questions/4838033/getting-the-port-name-of-a-connected-usb-device –

+0

Aslında bunu, bağlı birden fazla yazıcıda bile sorgulayabilirsiniz. – 0xC0000022L

+0

Elbette, programın farklı sistemlerde çoklu yazıcı türlerini sorgulaması gerekiyorsa, daha karmaşık hale gelebilirdi. –

4

Muhtemelen yazıcının adını veya bununla ilgili diğer ayrıntıları biliyorsunuzdur.

O zaman sadece PRINTER_INFO_2 ile EnumPrinters kullanabilir ve (veya istediğiniz diğer statü kaçının) PRINTER_STATUS_OFFLINE kontrol edin.

Alternatif olarak, SetupDi* işlevlerini (aka Setup API), yazıcıyla eşleşen USB aygıtının şu anda bağlı olup olmadığını anlamak için kullanabilirsiniz.

+0

+1 USB eşleme cihazını araştırmak gitmek için iyi bir yoldur. Belki de bu yeni bir gönderi çağırır. – menjaraz

İlgili konular