USB Bellek takıldığını algılamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
MehmetZahit
Üye
Mesajlar: 70
Kayıt: 04 Tem 2007 08:39

USB Bellek takıldığını algılamak

Mesaj gönderen MehmetZahit »

s.a.

sürekli açık duran bir programda USB Bellek takıldığında algılamaya yarayan bir kod varmı?
USB bellek takılınca sürücü harfinide algılamak gerekiyor. . .
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen White Rose »

MiTec componentinin (Ücretli) MiTec_Usb ve MiTec_DeviceMonitor bileşenleri ile bu işi yapabilirsiniz.

MiTec_DeviceMonitor bileşeninin OnDeviceConnect eventine aşağıdaki kodu yazın.

procedure Tform1.DeviceMonitorDeviceConnect(Sender: TObject;
DeviceDesc: TDeviceDesc);
begin
if CheckBox1.Checked and SameText(DeviceDesc.GUID,GUIDToString(GUID_DEVINTERFACE_USB_DEVICE)) then
Usb_Bilgilerini_Oku; // Okuma procedure
end;
Kullanıcı avatarı
MehmetZahit
Üye
Mesajlar: 70
Kayıt: 04 Tem 2007 08:39

Re: USB Bellek takıldığını algılamak

Mesaj gönderen MehmetZahit »

Komponentle çözülen sorunun mutlaka kodu da olması gerekir.
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: USB Bellek takıldığını algılamak

Mesaj gönderen CiTiZEN »

elbette zaten birleştirilmiş hali componentler ama yeri gelir componentlerin içinde delphiden kodlar, procedure ler, yeri gelir bir asm blogu açılır onun içerisinden adresleri kontrol eden vs. kodlar kullanılır bu şekildedir diye tahmin ediyorum.
UWESIS CORPORATION
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen White Rose »

MehmetZahit yazdı:Komponentle çözülen sorunun mutlaka kodu da olması gerekir.
? ? ?
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: USB Bellek takıldığını algılamak

Mesaj gönderen aLonE CoDeR »

http://delphiturkiye.com/forum/viewtopi ... &hilit=usb

(href kullanarak linkleyemedim, garip..)
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen Lost Soul »

White Rose yazdı:
MehmetZahit yazdı:Komponentle çözülen sorunun mutlaka kodu da olması gerekir.
? ? ?
"Component de bu işi sonuçta kodla hallediyor. USB disk takıldığını algılamak için iki satır kod yazmayıp komponente başvurmak niye!!!" demek istiyor arkadaş. :)
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen White Rose »

Doğrudur, ama sağlıklı ve düzgün bir kod bulabilirsek :)
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: USB Bellek takıldığını algılamak

Mesaj gönderen aLonE CoDeR »

@Lost Soul;

İmzandaki sazan muhabbetine başka yerlerde itibar etmem ama böyle bir ortamda bunun gibi alelade muhabbetlerin olacağını düşünmediğim için tıkladım. Çocukça olmuş :idea:
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen Lost Soul »

aLonE CoDeR yazdı:@Lost Soul;

İmzandaki sazan muhabbetine başka yerlerde itibar etmem ama böyle bir ortamda bunun gibi alelade muhabbetlerin olacağını düşünmediğim için tıkladım. Çocukça olmuş :idea:
amaç stresli olan bu meslek sürecimizde yüzlere bir anlık da olsa tebessüm yerleştirmek. Şahsen ben ilk karşılştığımda tıkladığımda tebessüm etmiştim. Hakaret olarak algılamayın lütfen.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen Lost Soul »

Bu arada bu konuyu takibe almıştım cevap yazılırsa faydalanmak için.
Ancak konu kaydığı için bi nette araltırayım dedim.
WM_DEVICECHANGE mesajını yakalanmak sureti ile aşağıdaki kod oluşturulmuş.

wParamda ise değişiklik türleri alınmış.
DBT_DEVICEARRIVAL: Yeni sürücü takıldı
DBT_DEVICEQUERYREMOVE: Sürücü çıkarılacak (kullanıcı sürücü çıkarmak istedi)
DBT_DEVICEREMOVEPENDING: Aygıt çıkarılmak üzere yada çıkarılmaya hazı ( sanırım donanımı güvenle kaldır mevzuu ile alakalı bişey)
DBT_DEVICEREMOVECOMPLETE: { Aygıt mevtaa :) };
burada
DEVICEARRIVAL wParamı istediğiniz işi görecektir.
bu olayla karşılaşınca
GetDeviceType (ya da öye bişeydi) ile usb disk olup olmadığını kontrol edebilirsiniz.

Kod: Tümünü seç

     unit Unit1;
      interface
      uses ...
      type
      TForm1 = class(TForm)
      ...
      protected
      procedure WndProc( var message: TMessage ); override;
      end;
       
      implementation
       
      procedure TForm1.WndProc( var message: TMessage );
      begin
      if message.msg = WM_DEVICECHANGE
      then case message.wParam of
        DBT_DEVICEARRIVAL: { A new drive is available };
        DBT_DEVICEQUERYREMOVE: { The user pressed the eject button. Allow? };
        DBT_DEVICEREMOVEPENDING: { The device is about to eject whether you like it or not. Clean up. };
        DBT_DEVICEREMOVECOMPLETE: { The device is no longer available. };
      end;
      inherited
      end;
Edit : @aLonE CoDeR'in cevabını görmemişim :) neyse bu da elternatif kod olsun.

Edit2:Kodu denedim son hali aşağıdaki gibi

Kod: Tümünü seç

procedure Tmain.WndProc( var message: TMessage );
const

  DBT_CONFIGCHANGECANCELED   =$0019; //A request to change the current configuration (dock or undock) has been canceled.
  DBT_CONFIGCHANGED          =$0018; //The current configuration has changed, due to a dock or undock.
  DBT_CUSTOMEVENT            =$8006; //A custom event has occurred.Windows NT 4.0 and Windows 95:  This value is not supported.
  DBT_DEVICEARRIVAL          =$8000; //A device or piece of media has been inserted and is now available.
  DBT_DEVICEQUERYREMOVE      =$8001; //Permission is requested to remove a device or piece of media. Any application can deny this request and cancel the removal.
  DBT_DEVICEQUERYREMOVEFAILED=$8002; //A request to remove a device or piece of media has been canceled.
  DBT_DEVICEREMOVECOMPLETE   =$8004; //A device or piece of media has been removed.
  DBT_DEVICEREMOVEPENDING    =$8003; //A device or piece of media is about to be removed. Cannot be denied.
  DBT_DEVICETYPESPECIFIC     =$8005; //A device-specific event has occurred.
  DBT_DEVNODES_CHANGED       =$0007; //A device has been added to or removed from the system.Windows NT 4.0 and Windows Me/98/95:  This value is not supported.
  DBT_QUERYCHANGECONFIG      =$0017; //Permission is requested to change the current configuration (dock or undock).
  DBT_USERDEFINED            =$FFFF;

begin
  if message.msg = WM_DEVICECHANGE then
  Begin
    //Caption:=( 'Bana bişeyler oluyor hilmi'+vARtOsTR(message.WParam));

    case message.wParam of
      DBT_DEVICEARRIVAL:  Caption:=('Yeni aygıt');
      DBT_DEVICEQUERYREMOVE: Caption:=( 'Aygıt çıkar seçildi');
      DBT_DEVICEREMOVEPENDING: Caption:=( 'Aygıt çıkarılıyor');
      DBT_DEVICEREMOVECOMPLETE: Caption:=('Aygıt çıkarıldı');
      DBT_DEVNODES_CHANGED: Caption:=('Aygıt takıldı veya çıkarıldı'); // bu kısım flash disk dışındaki aygıtlar için çalışıyor. Örneğin kablususz mouse vs.
    end;
  End;
inherited;
end;
yanlız burada fazla işlem yığını yapmamak lazım. Zira mesajların işlenmesi gecikirse program da kilitlenir. Onun yerine olayı bir değişkene atıp programın başka yerinde zaman zaman check edip işlem yapmak ya da thread açmak daha mantıklı.
Kullanıcı avatarı
MehmetZahit
Üye
Mesajlar: 70
Kayıt: 04 Tem 2007 08:39

Re: USB Bellek takıldığını algılamak

Mesaj gönderen MehmetZahit »

evet bu kodlarla USB bir cihaz takıldığını anlayabiliyoruz. Benim aradığım bu değildi, asıl yapmak istediğim USB Bellek takıldımı, takıldıysa sürücü harfi ne?
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: USB Bellek takıldığını algılamak

Mesaj gönderen Lost Soul »

MehmetZahit yazdı:evet bu kodlarla USB bir cihaz takıldığını anlayabiliyoruz. Benim aradığım bu değildi, asıl yapmak istediğim USB Bellek takıldımı, takıldıysa sürücü harfi ne?
algıladıktansonra sürücü tiplerini algılayanfonksiyonlarla sürücülerin hangilerinin usb disk olduğunu anlayabilirsin.

forumdaörnekleri mevcut.
Cevapla