Forum
Merhaba arkadaşlar
Yaptığım uygulamada bilgisayara bağlı scannerları listelemekteyim.
Ancak diyelim ben tarayıcıyı bilgisayardan çıkardıktan sonra tekrar çalıştırdığımda normalde tarayıcı bulunamadı diye mesaj dönmeli
ancak ben bilgissayarı yeniden başlatmadan listeden düşmüyor.Yani reset etmiyor hemen.Kod şöyle
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPSignedDriver ");
foreach (ManagementObject obj in searcher.Get())
{
listbox.items.Add(string.IsNullOrEmpty(obj.GetPropertyValue("DeviceName").ToString()) ? string.Empty obj.GetPropertyValue("DeviceName").ToString());
}
Ben tarayıcı çıkardıktan sonra yukarıda yaptığım sorguda gelen deviceların restart olmasını istiyorum ancak bilgisayarı yeniden başlatıncaya kadar olmuyor.(Öncesinde Listboxı boşaltıyorum,görev yöneticisinden uygulamayı sonlandırıyorum yine olmuyor).
Nasıl bir yol izlemeliyim.
Arkadaşlar sorunu anlamadınız galiba
Demem şu bir tane tarayıcı var ve ben yukarıdaki kodla tarayıcının bilgisayara bağlı olup olmadığını kontrol ediyorum.
Tarayıcıyı bağlıyorum bilgisayara ve kodu çalıştırıyorum.Kod çalıştıktan sonra listboxa bilgisayardaki aygıtları
listboxa listeliyor ve bu listede benim taryıcımda var.Bu şekilde tarayıcının bağlı olup olmadığını anlıyorum.
Ancak ben tarayıcıyı çıkardığım zaman yani bilgisayardan bağlantıyı kopardığım zaman tekrar programı çalıştırdığımda listboxa tekra tarayıcı
geliyor (Normalde tarayıcıyı artık listeye eklememeli).Ta ki ben bilgisayarı yeniden başlatana kadar tarayıcı o listeye geliyor.
Benim düşündüğüm aygıtın adı bellekte veya ManagementObjectSearcher clasında bi yerde tutuluyor ancak ne yaptıysam olmadı ,
refresh ettim,kodu değiştirdim ama malesef olmadı.
Bu konu ile ilgili bilgisi veya fikri olan arkadaşlar yardımcı olursa sevinirim.
obj.GetPropertyValue("Status") den durumuna bakip ona göre listbox i update etmeyi denedinizmi
obj.GetPropertyValue("Status") den durumuna bakip ona göre listbox i update etmeyi denedinizmi
Hocam verdiğiniz kod ile ilgili bi propertie yok.
Listbox ı her tarayıcı var mı yok mu kontrolünden sonra boşaltıyorum.
Ancak belli ki bellekte bi yerde tutuluyor bu liste.Hani tarayıcı ile ilgili bi sıkıntı mı var acaba dedim sonra bi tane usb bağladım yine aynı sıkıntı.Bilgisayarı yeniden başlatmadan diğer duruma geçmiyor.Bide şimdi bir şey fark ettim belli bir süre programı çalıştır kapat arda arda (sayısını belli değil kaç kere çalıştır kapat ) yapınca durum düzeliyor..Herhalde belleği siliyor,kendini refresh ediyo.Bir türlü anlayamadım gitti.
Ben ise tarayıcıyı çıkardığım anda tarayıcı yok desin,taktığım anca var desin istiyorum.Böyle rastgele çalışacak veya bilgisayarı yeniden başlatınca olacaksa sıkıntı bu.Bu belleği boşaltmam lazım.
scanner listesini service lerden alıyor.Scanner bilgisayardan cıkarıldıktan sonra servisi calismaya devam ediyor.Bu yuzden sizin yazdıgınız kod scanner ı buluyor =) Bilgisayar resetlendıgınde servis yenıden baslamadıgı icin sıkıntısız calisiyor.Buna bnzer bıseyle karsılasmıstım. Status property die hatırlamıstım ama demekki degilmis.bakıyım bı sıze yazarım bulabilirsem
scanner listesini service lerden alıyor.Scanner bilgisayardan cıkarıldıktan sonra servisi calismaya devam ediyor.Bu yuzden sizin yazdıgınız kod scanner ı buluyor =) Bilgisayar resetlendıgınde servis yenıden baslamadıgı icin sıkıntısız calisiyor.Buna bnzer bıseyle karsılasmıstım. Status property die hatırlamıstım ama demekki degilmis.bakıyım bı sıze yazarım bulabilirsem
bulursan güzel olur
Arkadaşlar konu hakkında bilgisi olan yok mu?
Bir vb örneği mevcut .burada device in chagen eventi ile kontrol edebilirsin.Win32_DeviceChangeEvent iş görecektir. Bir timer veya bir background worker yazarak sürekli bu eventi kontrol altında tutabilirsiniz.
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Dim WithEvents w As ManagementEventWatcher
Dim q As WqlEventQuery
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
q = New WqlEventQuery("Select * from Win32_DeviceChangeEvent")
w = New ManagementEventWatcher(q)
w.Start()
End Sub
Private Sub w_EventArrived(ByVal sender As Object, ByVal e As
System.Management.EventArrivedEventArgs) Handles w.EventArrived
MessageBox.Show("Device Event")
End Sub
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
w.Stop()
End Sub
End Class
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com
Arkadaşlar aşağıdaki kod ile çözdüm.
İlgilenen arkadaşlara teşşekkürler
int ScannerCount = 0;
ManagementObjectSearcher deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity Where Name='TarayıcıAdı'");
if (deviceList != null)
{
foreach (ManagementObject device in deviceList.Get())
{
ScannerCount += 1;
}
}
Geri bildirim için teşekkürler.
ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com