我正在編寫一個想要訪問數碼相機的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