none
C# Sürücü Listesini Güncel Olarak Alabilmek RRS feed

  • Soru

  • foreach (DriveInfo surucu in suruculer)
                {
             surucu.name ....

    Selam,

    Aktif sürücü listesini bu şekilde çekebiliyoruz fakat programa res atmadığımız sürece yeni takılan sürücüleri çekemiyoruz.

      protected override void WndProc(ref Message m)
            {
                try
                {
    
    
                    if (m.Msg == 0x219)
                    {

    Flash takılıp takılmadığını da algılayabiliyoruz fakat yeni bir flash bellek taktığımızda programımız açıksa o flashı algılayamıyor. İllaki programı yeniden başlatmamız gerekiyor nasıl çözebiliriz?

    18 Kasım 2019 Pazartesi 23:51

Yanıtlar

Tüm Yanıtlar

  • https://docs.microsoft.com/tr-tr/dotnet/api/system.io.filesystemwatcher?view=netframework-4.8

    değişiklikleri FileSystemWatcher'a ait bir event ile yakalamalısınız.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen theowel 19 Kasım 2019 Salı 09:08
    19 Kasım 2019 Salı 07:25
    Moderatör
  •     const int WM_DEVICECHANGE = 0x0219;  
            const int DBT_DEVICEARRIVAL = 0x8000;
            const int DBT_DEVICEREMOVALCOMPLETE = 0x8004;
            const int DBT_DEVTYPVOLUME = 0x00000002;
    
    private static char DriveMaskToLetter(int mask)
            {
                char letter;
                string drives = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
                int cnt = 0;
                int pom = mask / 2;
                while (pom != 0)         
                {
                    pom = pom / 2;
                    cnt++;
                }
                if (cnt < drives.Length)
                    letter = drives[cnt];
                else
                    letter = '?';
                return letter;
            }
    
    protected override void WndProc(ref Message m)
            {
                try
                {
     
    
                    if (m.Msg == WM_DEVICECHANGE)
                    {
                        DEV_BROADCAST_VOLUME vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
                        if ((m.WParam.ToInt32() == DBT_DEVICEARRIVAL) && (vol.dbcv_devicetype == DBT_DEVTYPVOLUME))
                        {
                           //////
                        }
                        if ((m.WParam.ToInt32() == DBT_DEVICEREMOVALCOMPLETE) && (vol.dbcv_devicetype == DBT_DEVTYPVOLUME))
                        {
                             //////
                        }
                    }
    
    
                    
                    base.WndProc(ref m);
                }
                catch (Exception)
                {
    
                }
            }
    
    
    
     [StructLayout(LayoutKind.Sequential)]  
            public struct DEV_BROADCAST_VOLUME
            {
                public int dbcv_size;
                public int dbcv_devicetype;
                public int dbcv_reserved;
                public int dbcv_unitmask;
            }
    Bu yöntemle çözdüm
    19 Kasım 2019 Salı 09:08