我正在编写一个想要访问数码相机的WPF应用程序,并且一直疯狂地搜索解决方案,我很满意它的一切。如何使用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不根据该条出现,并没有出现有关联的驱动器盘符...
但这里是我的主要问题,为什么添加iPhone时,Windows消息DBT_DEVNODES_CHANGED会触发,但添加摄像头时会触发DBT_DEVICEARRIVAL消息?
我非常希望能够从任何USB设备“获取”文件,当用户在插入它。
有没有人有这方面的经验?我的Win32编程是非常有限......
干杯, 马克
谢谢,实际上,我并不太在意苹果设备无法工作,我真的只需要摄像头就可以工作。我对这一切都更加好奇,如果它会变得艰难,那么在这个时候,数码相机会出现病态。 – Mark 2010-03-24 04:25:41
问题是大多数相机仅支持Windows媒体设备型号。作为USB群发存储的相机是少数,或者至多几年前它们是少数。祝你好运。 – Coincoin 2010-03-24 04:28:32
我明白了,那么如何在媒体设备上以编程方式访问文件? – Mark 2010-03-24 05:03:21