2010-03-24 5 views
1

디지털 카메라에 액세스하려고하는 WPF 응용 프로그램을 작성하고 솔루션 및 Im의 사용 방법에 대해 매우 만족하고 있습니다.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; 
      } 
     } 
    } 

. 나는이 때 카메라를 꽂을 때 "이동식 저장 장치가있는 장치"아래의 창에 나타나고 드라이브 문자가 할당되어 있음을 기억해야합니다. 내 아이폰을 테스트하기에 내가 연결

그러나, 내 여기, 아이폰은 해당 섹션 아래에 표시되지 않습니다, 그리고 ... 그것에 연결된 드라이브 문자를 가지고

표시되지 않습니다하지만 주요 질문, 왜 아이폰을 추가 할 때 창 메시지 DBT_DEVNODES_CHANGED가 터지지 만 카메라를 추가하면 DBT_DEVICEARRIVAL 메시지가 나타 납니까?

내가 이상적으로 사용자에 플러그 때. 모든 USB 장치에서 파일을 "GET"할

이 사람이 어떤 경험이 있습니까 수 있도록하고 싶습니다

? 내 Win32 프로그래밍은 매우 USB 미디어 업체 두 가지 종류가 있습니다 마크

답변

2

...

건배를 제한됩니다. 간단한 카메라 및 휴대용 미디어 플레이어 용 드라이브 및 Windows Media 장치처럼 작동하는 USB 대용량 저장 장치.

일부 카메라 (일반적으로 값싼 카메라)는 Windows Media 장치 모델 만 구현하고 다른 카메라는 USB 대용량 저장 장치 모델을 구현합니다.

카메라가 USB 대용량 저장 장치 인 동안 iPhone은 Windows Media 장치로 취급됩니다. 나는 장치에 그림이나 스크린 샷이있을 때 갑자기 WMD 모델로 전환하는 일부 Apple 장치 (특히 터치 생성)에 "문제"가 있음을 알고 있습니다. iPhone으로 찍은 스크린 샷이나 그림을 삭제하고 문제가 해결되는지 확인하십시오. 그렇다면 코드가 Windows Media 장치 모델을 지원하지 않기 때문입니다.

MSDN library은 그 엉망진창을 정리하는 데 도움이 될 수 있습니다. 그들은 여러 번 API를 업데이트하고 일부를 중단했으며 다른 곳에서는 더 많은 부분을 추가했으며 지금은 fix-it-all TM이 될 새 버전이있는 것으로 보입니다.

+0

감사합니다. 실제로 사과 장치가 작동하지 않는다고 생각하지 않습니다. 실제로 카메라를 작동시켜야합니다. 나는이 모든 것에 대해 더 궁금해했으며, 힘든 경우에는이 시점에서 디지털 카메라를 사용하는 것이 좋지 않았습니다. – Mark

+0

문제는 대부분의 카메라가 Windows 미디어 장치 모델 만 지원한다는 것입니다. USB 대용량 저장 장치로 작동하는 카메라는 소수이거나 기껏해야 몇 년 전의 소수였습니다. 좋은 결과 내길 바랄 게. – Coincoin

+0

미디어 장치에서 프로그래밍 방식으로 파일을 어떻게 얻을 수 있습니까? – Mark

관련 문제