Подскажите пожалуйста в какой стороне копать вот в каком вопросе.
Необходимо определять и обрабатывать следующие события:
— вставка/изъятие cd/dvd дисков;
— вставка/изъятие флешек;
— вставка/изъятие карточек в cardreader.
Hello, "Yari"
> Необходимо определять и обрабатывать следующие события:
> — вставка/изъятие cd/dvd дисков;
> — вставка/изъятие флешек;
> — вставка/изъятие карточек в cardreader.
Можно покопать в сторону WMI событий. Каждое изменение в дисках отражается таким событием
Posted via RSDN NNTP Server 1.9 alpha
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, 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 >>
Здравствуйте, HotDog, Вы писали:
HD>Здравствуйте, Yari, Вы писали:
Y>>Подскажите пожалуйста в какой стороне копать вот в каком вопросе.
Y>>Необходимо определять и обрабатывать следующие события:
Y>> — вставка/изъятие cd/dvd дисков;
Y>> — вставка/изъятие флешек;
Y>> — вставка/изъятие карточек в cardreader.
HD>Писал пару недель назад именно с такой целью...
HD>вырезка из рабочей программы...
Я уже и сам докопался, но все равно спасибо огромное!