Im пишу приложение WPF, которое хочет получить доступ к цифровой камере, и безумно googling для решений, и я очень доволен тем, как все это происходит.Как получить файлы с устройства с помощью USB
Это то, что у меня есть на данный момент:
private const decimal WM_DEVICECHANGE = 0x0219;
private const int DBT_DEVTYP_HANDLE = 6;
private const int DBT_DEVNODES_CHANGED = 7;
private const int BROADCAST_QUERY_DENY = 0x424D5144;
private const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device
private const int DBT_DEVICEQUERYREMOVE = 0x8001; // Preparing to remove (any program can disable the removal)
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // removed
private const int DBT_DEVTYP_VOLUME = 0x00000002; // drive type is logical volume
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var mainFormWinInteropHelper = new System.Windows.Interop.WindowInteropHelper(this);
System.Windows.Interop.HwndSource.FromHwnd(mainFormWinInteropHelper.Handle).AddHook(HwndHandler);
}
private IntPtr HwndHandler(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam, ref bool handled)
{
ProcessWinMessage(msg, wparam, lparam);
handled = false;
return IntPtr.Zero;
}
private void ProcessWinMessage(int msg, IntPtr wparam, IntPtr lparam)
{
int deviceType;
char driveLetter;
if (msg == WM_DEVICECHANGE)
{
var int32 = wparam.ToInt32();
switch (int32)
{
case DBT_DEVICEARRIVAL:
Console.WriteLine("Device Arrival");
break;
case DBT_DEVICEQUERYREMOVE:
Console.WriteLine("Device Query Removed");
break;
case DBT_DEVICEREMOVECOMPLETE:
Console.WriteLine("Device Removed");
break;
case DBT_DEVNODES_CHANGED:
Console.WriteLine("Device added or removed");
break;
}
}
}
Это на самом деле все работает отлично подходит для моей цифровой камеры, и я могу получить фотографии с нее. В это время я должен отметить, что когда я подключаю свою камеру, она появляется в окнах под «устройствами со съемным хранилищем», и у нее есть буква диска, выделенная для него.
Однако, когда я включил в моем iPhone, чтобы проверить это, iPhone не появляется под этим разделом, и не представляется буква диска, связанная с ним ...
Но вот мой главный вопрос: почему сообщение с окном DBT_DEVNODES_CHANGED срабатывает при добавлении iPhone, но сообщение DBT_DEVICEARRIVAL срабатывает при добавлении камеры?
Я бы в идеале хотелось бы иметь возможность «получить» файлы с любого USB-устройства, когда пользователь подключает его.
Кто-нибудь есть опыт работы с этим? Моя программирования Win32 очень ограниченно ...
Приветствия, Марк
Спасибо, на самом деле, я не слишком обеспокоен тем, что устройства Apple не работают, мне действительно нужны камеры для работы. Мне было любопытно все это, и если он будет жестким, то в этот момент плохой диск с цифровыми камерами. – Mark
Проблема заключается в том, что большинство камер поддерживают только модель устройств Windows. Камеры, выступающие в качестве хранилища USB-накопителей, являются меньшинством, или, в лучшем случае, они были меньшинством несколько лет назад. Удачи с этим. – Coincoin
Я вижу, так как я могу получить файлы программно на медиа-устройстве? – Mark