C# ile Bilgisayara ...
 
Bildirimler
Hepsini Temizle

C# ile Bilgisayara bağlı scanner,usb listeleme  

  RSS
Erkan İNANÇ
(@ErkaniNANC)
Üye

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. 

Alıntı
Gönderildi : 30/09/2014 12:37
Erkan İNANÇ
(@ErkaniNANC)
Üye

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. 

CevapAlıntı
Gönderildi : 30/09/2014 16:22
ali cengez
(@alicengez)
Üye

obj.GetPropertyValue("Status")  den durumuna bakip ona göre listbox i update etmeyi denedinizmi

CevapAlıntı
Gönderildi : 30/09/2014 17:13
Erkan İNANÇ
(@ErkaniNANC)
Üye

[quote user="ali cengez"]obj.GetPropertyValue("Status")  den durumuna bakip ona göre listbox i update etmeyi denedinizmi[/quote]

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. 

CevapAlıntı
Gönderildi : 30/09/2014 17:24
ali cengez
(@alicengez)
Üye

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

CevapAlıntı
Gönderildi : 30/09/2014 17:33
Erkan İNANÇ
(@ErkaniNANC)
Üye

[quote user="ali cengez"]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[/quote]

bulursan güzel olur 

CevapAlıntı
Gönderildi : 30/09/2014 19:23
Erkan İNANÇ
(@ErkaniNANC)
Üye

Arkadaşlar konu hakkında bilgisi olan yok mu?

CevapAlıntı
Gönderildi : 08/10/2014 11:36
Erdem SELÇUK
(@eravse)
Saygın Üye Forum Yöneticisi

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

CevapAlıntı
Gönderildi : 08/10/2014 11:43
Erkan İNANÇ
(@ErkaniNANC)
Üye
      Hocam kodu aşağıdaki gibi çevirmeye çalıştım c# ta
      ancak yine tarayıcı bilgisayara bağlı olmamasna rağmen var görünüyor.
      ManagementObjectSearcher den dönen liste güncellenmiyor.
      Sıkıntı nerede olabilir
 
 
        private void BtnScanAllClick(object sender, EventArgs e)
        {
             ManagementEventWatcher w;
             WqlEventQuery q; 
             q = new WqlEventQuery("Select * from Win32_DeviceChangeEvent");
             w = new ManagementEventWatcher(q);
              w.Start();
              var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPSignedDriver");
              foreach (ManagementObject obj in searcher.Get())
              {
                  if (obj.GetPropertyValue("Description") != null)
                  {
                      try
                      {
                          listBox1.Items.Add(obj.GetPropertyValue("Description").ToString());
                          if (obj.GetPropertyValue("Description").ToString().Contains("TarayıcıAdı"))
                          {
                              i = 1;
                          }
                      }
                      catch (Exception ex)
                      {
                      }
                  }
              }
              w.Stop();
        
     
CevapAlıntı
Gönderildi : 13/11/2014 19:13
Erkan İNANÇ
(@ErkaniNANC)
Üye

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;

                }

            }

CevapAlıntı
Gönderildi : 19/11/2014 11:58
Erdem SELÇUK
(@eravse)
Saygın Üye Forum Yöneticisi

Geri bildirim için teşekkürler.

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

CevapAlıntı
Gönderildi : 19/11/2014 19:04
Paylaş: