USB Bellek takıldığını algılamak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- MehmetZahit
- Üye
- Mesajlar: 70
- Kayıt: 04 Tem 2007 08:39
USB Bellek takıldığını algılamak
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. . .
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. . .
- 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
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;
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;
- MehmetZahit
- Üye
- Mesajlar: 70
- Kayıt: 04 Tem 2007 08:39
Re: USB Bellek takıldığını algılamak
Komponentle çözülen sorunun mutlaka kodu da olması gerekir.
Re: USB Bellek takıldığını algılamak
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
- 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
? ? ?MehmetZahit yazdı:Komponentle çözülen sorunun mutlaka kodu da olması gerekir.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: USB Bellek takıldığını algılamak
"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ş.White Rose yazdı:? ? ?MehmetZahit yazdı:Komponentle çözülen sorunun mutlaka kodu da olması gerekir.

- 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
Doğrudur, ama sağlıklı ve düzgün bir kod bulabilirsek 

-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: USB Bellek takıldığını algılamak
@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ş
İ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ş

Re: USB Bellek takıldığını algılamak
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.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ş
Re: USB Bellek takıldığını algılamak
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.
Edit : @aLonE CoDeR'in cevabını görmemişim
neyse bu da elternatif kod olsun.
Edit2:Kodu denedim son hali aşağıdaki gibi
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ı.
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;

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;
- MehmetZahit
- Üye
- Mesajlar: 70
- Kayıt: 04 Tem 2007 08:39
Re: USB Bellek takıldığını algılamak
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?
Re: USB Bellek takıldığını algılamak
algıladıktansonra sürücü tiplerini algılayanfonksiyonlarla sürücülerin hangilerinin usb disk olduğunu anlayabilirsin.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?
forumdaörnekleri mevcut.