Определение изменений в съемных носителях
От: Yari Украина  
Дата: 14.07.04 09:17
Оценка:
Подскажите пожалуйста в какой стороне копать вот в каком вопросе.
Необходимо определять и обрабатывать следующие события:
— вставка/изъятие cd/dvd дисков;
— вставка/изъятие флешек;
— вставка/изъятие карточек в cardreader.
Re: Определение изменений в съемных носителях
От: TK Лес кывт.рф
Дата: 14.07.04 09:22
Оценка:
Hello, "Yari"
> Необходимо определять и обрабатывать следующие события:
> — вставка/изъятие cd/dvd дисков;
> — вставка/изъятие флешек;
> — вставка/изъятие карточек в cardreader.

Можно покопать в сторону WMI событий. Каждое изменение в дисках отражается таким событием
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Определение изменений в съемных носителях
От: HotDog Швейцария www.denebspace.com
Дата: 16.07.04 12:10
Оценка:
Здравствуйте, Yari, Вы писали:

Y>Подскажите пожалуйста в какой стороне копать вот в каком вопросе.

Y>Необходимо определять и обрабатывать следующие события:
Y> — вставка/изъятие cd/dvd дисков;
Y> — вставка/изъятие флешек;
Y> — вставка/изъятие карточек в cardreader.

Писал пару недель назад именно с такой целью...
вырезка из рабочей программы...


    [StructLayout(LayoutKind.Sequential)]
    public struct DEV_BROADCAST_VOLUME
    {
        public int dbcv_size;
        public int dbcv_devicetype;
        public int dbcv_reserved;
        public int dbcv_unitmask;
        //public Int16 dbcv_flags;
    }

        private const int HWND_BROADCAST    = 0xffff;
        private const int WM_USER            = 0x0400;
        private const int UM_DEVICECHANGED    = WM_USER + 1;

        [DllImport("User32.dll",CharSet = CharSet.Auto, SetLastError=true) ]
        static extern bool PostMessage(System.IntPtr hwnd, int wMsg, uint wParam, uint lParam);


        private void CheckMedium(int mediumMask, int mediumRemoved)
        {
            if (mediumRemoved == 0)
                this.BackColor = Color.Green;
            else
                this.BackColor = SystemColors.Control;

            switch (mediumMask)
            {
                case 1:
                    this.lblDevice.Text = "A:";
                    break;
                case 2:
                    this.lblDevice.Text = "B:";
                    break;
                case 4:
                    this.lblDevice.Text = "C:";
                    break;
                case 8:
                    this.lblDevice.Text = "D:";
                    break;
                case 16:
                    this.lblDevice.Text = "E:";
                    break;
                case 32:
                    this.lblDevice.Text = "F:";
                    break;
                case 64:
                    this.lblDevice.Text = "G:";
                    break;
            }
        }

        protected override void WndProc(ref Message m)
        {
            //you may find these definitions in dbt.h and winuser.h
            const int WM_DEVICECHANGE            = 0x0219;        // a change to the hardware configuration of a device or the computer
            const int DBT_DEVICEARRIVAL            = 0x8000;        // system detected a new device
            const int DBT_DEVICEREMOVECOMPLETE    = 0x8004;        // a device or piece of media has been removed.
            const int DBT_DEVTYP_VOLUME            = 0x00000002;    // logical volume
    
            //we detect the media arrival event
            if (m.Msg == WM_DEVICECHANGE)
            {
                if ((m.WParam.ToInt32() == DBT_DEVICEARRIVAL) || (m.WParam.ToInt32() == DBT_DEVICEREMOVECOMPLETE))
                {
                    int devType = Marshal.ReadInt32(m.LParam,4);
                    if(devType == DBT_DEVTYP_VOLUME)
                    {
                        DEV_BROADCAST_VOLUME vol;
                        vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam,typeof(DEV_BROADCAST_VOLUME));
                        
                        //Post user message
                        PostMessage(this.Handle,UM_DEVICECHANGED, (uint)vol.dbcv_unitmask, (m.WParam.ToInt32() == DBT_DEVICEARRIVAL)?(uint)0:(uint)1);
                    }
                }
            }
            else
            {
                if (m.Msg == UM_DEVICECHANGED)
                    CheckMedium(m.WParam.ToInt32(), m.LParam.ToInt32());
            }

            base.WndProc (ref m);
        }
... << RSDN@Home 1.1.4 beta 1 >>
Re[2]: Определение изменений в съемных носителях
От: Yari Украина  
Дата: 16.07.04 13:04
Оценка:
Здравствуйте, HotDog, Вы писали:

HD>Здравствуйте, Yari, Вы писали:


Y>>Подскажите пожалуйста в какой стороне копать вот в каком вопросе.

Y>>Необходимо определять и обрабатывать следующие события:
Y>> — вставка/изъятие cd/dvd дисков;
Y>> — вставка/изъятие флешек;
Y>> — вставка/изъятие карточек в cardreader.

HD>Писал пару недель назад именно с такой целью...

HD>вырезка из рабочей программы...

Я уже и сам докопался, но все равно спасибо огромное!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.