Обнаружить вставку портативного устройства в Windows

Я использую кусок кода C#, который обнаруживает подключенные устройства и перечисляет их. код должен запускаться на компьютере kisok и помогать клиентам легко получать доступ и загружать свои файлы. приведенный ниже код работает нормально, за исключением того, что он не распознает портативные устройства, такие как мобильные устройства.

public void WndProc(ref Message m)
{
    int devType;
    char c;

    if (m.Msg == WM_DEVICECHANGE)
    {
        // WM_DEVICECHANGE can have several meanings depending on the WParam value...
        switch (m.WParam.ToInt32())
        {
            // New device has just arrived
            case DBT_DEVICEARRIVAL:

                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));

                    // Get the drive letter 
                    c = DriveMaskToLetter(vol.dbcv_unitmask);

                    /* rest of handler is here */
                }
                break;

            case DBT_DEVNODES_CHANGED:

                devType = Marshal.ReadInt32(m.LParam, 4); // m.LParam in this case is 0

                // handle portable device
                break;
        }
    }
}

таким образом, значение mWParam, полученное при подключении мобильного устройства, равно DBT_DEVNODES_CHANGED (0x0007), а mLParam равно 0. Возможно ли из этого события распознать портативное устройство? есть ли связанный API обнаружения, который я могу добавить сюда?

Я пробовал следующий код WMI, но, как и раньше, HandleEvent запускается только при подключении USB, но не мобильный телефон:(

    ManagementEventWatcher watcher = new ManagementEventWatcher();
    WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2");
    watcher.EventArrived += new EventArrivedEventHandler(HandleEvent);
    watcher.Query = query;
    watcher.Start();
    watcher.WaitForNextEvent();

0 ответов

Другие вопросы по тегам