4

WPDは、 Microsoftが機能すると述べている場合でも、Windows XP(重要な場合はSP1)では正しく機能しません。

WPDの問題:

IPortableDeviceManager.GetDevicesWindows 7で接続されているすべてのカメラを検出している間、呼び出しはWinXPでデバイスを検出しません。

他の何人かの人々は、WPDがXPで動作しないという同じ問題を抱えていました。解決策はありません: 1 2

WIAを使用して機能を再実装することにしました。

WIA自動化/WIAインターフェースの問題:

  • WIA automationカメラと対話するときに愚かなダイアログのみを提供します-私はむしろコードからこれを行う必要があります
  • WIA interfacesWIAで低レベルのタスクを実行するには、に対してプログラミングすることをお勧めします。C#からWIAインターフェイスを使用する方法のサンプルは見つかりませんでした(これがまったく不可能であるか、少なくとも非常に困難であるという兆候も見つかりました)

したがって、私はWIA 2.0(wiaaut.dllのラッパー)を見てきました。

  • 初めてHRESULT0x80210006(WIA_ERROR_BUSY)を取得し、その後WinXPでは常にHRESULTE_FAILを取得していますが、Windows7では同じコードが問題なく機能します。

ここでオプションがなくなりました... WindowsXPで動作するコンピューターに接続されたカメラに次の機能を提供するための代替手段をお勧めしますか?

  • 写真が撮られたという通知を送信します
  • 最近撮影した写真をカメラからダウンロードできます
4

1 に答える 1

8

Microsoft は、WMP11 がインストールされた XP で WPD と MTP がサポートされていると主張しており、実際にその通りです!

ただし、XP のデフォルトでは、カメラ デバイスはほとんどの場合、代わりに PTP ドライバー スタックをロードします。これは、[デバイス マネージャー] の [プロパティ] の [ドライバー] タブから [ドライバーの詳細] ページを見ると確認できます。

  • C:\Windows\System32\ptpusb.dll
  • C:\Windows\System32\ptpusd.dll

つまり、カメラ ベンダーが、XP 上のデバイス用に WPD 互換のカスタム INF ファイルを慎重に提供していない限りです。おそらく WMP10/11 に依存しているため、ほとんどの場合はそうではありません。

ただし、独自のカスタム INF を作成して MTP を有効にするのは比較的簡単です。詳細については、mtpdev.chm ヘルプ ファイルの「MTP デバイス用のカスタム INF ファイルの提供」セクションのMicrosoft Media Transfer Protocol Porting Kitに記載されています。

ただし、そこにある詳細はいくぶん不完全なようで、Windows Media Player 11 と共にインストールされた C:\Windows\Inf\WpdMtp.inf のコメントに必要なセクションについてさらに情報が必要です。

;;******************************************************************************
;; The following are to be used in vendor specific "Includes" and "Needs" sections.
;; Specifically, the INF should contain:
;;
;; [DDInstall]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTP
;;
;; [DDInstall.hw]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTP.Registration       <- includes all default legacy API and autoplay registration for the device
;;  - OR - 
;; Needs   = WPD.MTP.RegistrationBasic  <- only do minimum registration, no legacy API or autoplay
;;
;; [DDInstall.Services]
;; Include = wpdmtp.inf
;; Needs   = WPD.MTP.Services
;;
;; [DDInstall.CoInstallers]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.CoInstallers
;;
;; [DDInstall.Wdf]
;; Include = wpdmtp.inf
;; Needs = WPD.MTP.Wdf
;; UmdfServiceOrder=WpdMtpDriver
;;
;;******************************************************************************

たとえば、Nikon D90 の場合、次の INF ファイルを作成できます。

[Version]
Signature="$WINDOWS NT$"
Class=WPD
ClassGUID={EEC5AD98-8080-425f-922A-DABF3DE3F69A}
Provider=%Provider%
DriverVer=02/22/2006,5.2.5326.4762

[Manufacturer]
%MfgName%=Nikon

[Nikon]
%Nikon.DeviceDesc%=Nikon_MTP, USB\VID_04B0&PID_0421

[Nikon_MTP]
Include = wpdmtp.inf
Needs   = WPD.MTP

[Nikon_MTP.hw]
Include = wpdmtp.inf
Needs   = WPD.MTP.RegistrationBasic

[Nikon_MTP.Services]
Include = wpdmtp.inf
Needs   = WPD.MTP.Services

[Nikon_MTP.CoInstallers]
Include = wpdmtp.inf
Needs   = WPD.MTP.CoInstallers

[Nikon_MTP.Wdf]
Include = wpdmtp.inf
Needs   = WPD.MTP.Wdf
UmdfServiceOrder=WpdMtpDriver

[Strings]
Nikon.DeviceDesc       = "Nikon D90 MTP Device"
MfgName                 = "Nikon"
Provider                = "Nikon"

さまざまなデバイスをサポートするには、[Nikon] セクションの下で、デバイスの正しい PID と VID を変更または追加します。これらは、デバイス マネージャーの [詳細] タブで、ドロップダウンから [Hadrware Ids] を選択して見つけることができます。カメラが別のメーカーのものである場合は、すべての参照を「Nikon」に変更することもできます。

メモ帳で INF ファイルを作成したら、NikonD90.INF などの適切な名前で保存します。それで:

  • Windows デバイス マネージャーで、カメラ デバイスを右クリックし、[ドライバーの更新] をクリックします。
  • Windows Update の検索を求められたら、[いいえ、今回は接続しません] を選択します。
  • 「一覧または特定の場所からインストールする (詳細)」を選択します。
  • 「検索しないで、インストールするドライブを選択します」を選択します。
  • 「ディスク使用」をクリックします。
  • [ブラウザー] をクリックし、上記で作成した INF ファイルを保存したフォルダーに移動します。
  • INF ファイルを選択すると、MTP ドライバーがインストールされます。

デバイス マネージャーで、カメラ デバイスが [イメージング デバイス] から移動し、代わりに [ポータブル デバイス] の下に表示されていることがわかります。また、ドライバーの詳細には、(以前の PTP ではなく) 汎用 WPD MTP クラス ドライバーが使用されていることを示す次のファイルが表示されます。

  • C:\Windows\System32\wpdusb.dll
  • C:\Windows\System32\wudfrd.dll

これで、IPortableDeviceManager.GetDevices を使用して MTP デバイスを正常に列挙し、他のすべての API 関数を使用してカスタム MTP コマンドを送信できるようになります。詳細については、dimeby8による MSDN の投稿を参照してください。

上記のソリューションを使用すると、コードを変更することなく、32 ビットまたは 64 ビットの Windows XP から Windows 7 で動作する共通 API を使用してアプリケーションを構築できます。

于 2011-02-15T10:28:43.077 に答える