Forum

C# ile Bilgisayara ...
 
Bildirimler
Hepsini Temizle

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

11 Yazılar
3 Üyeler
0 Reactions
1,874 Görüntüleme
(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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. 

 
Gönderildi : 30/09/2014 12:37

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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. 

 
Gönderildi : 30/09/2014 16:22

(@alicengez)
Gönderiler: 32
Trusted Member
 

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

 
Gönderildi : 30/09/2014 17:13

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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. 

 
Gönderildi : 30/09/2014 17:24

(@alicengez)
Gönderiler: 32
Trusted Member
 

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

 
Gönderildi : 30/09/2014 17:33

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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 

 
Gönderildi : 30/09/2014 19:23

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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

 
Gönderildi : 08/10/2014 11:36

(@eravse)
Gönderiler: 1753
Üye
 

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

 
Gönderildi : 08/10/2014 11:43

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 
      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();
        
     
 
Gönderildi : 13/11/2014 20:13

(@ErkaniNANC)
Gönderiler: 123
Estimable Member
Konu başlatıcı
 

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;

                }

            }

 
Gönderildi : 19/11/2014 12:58

(@eravse)
Gönderiler: 1753
Üye
 

Geri bildirim için teşekkürler.

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

 
Gönderildi : 19/11/2014 20:04

Paylaş: