是WPD和MTP與WMP11支持XP
微軟要求安裝下載最新拍攝的照片的通知,確實這是事實!
但是,默認情況下,在XP上,相機設備很可能會加載PTP驅動程序堆棧。
- C:\ Windows \ System32下\ ptpusb.dll
- C:\ Windows \ System32下,您可以通過查看設備管理器,屬性,驅動程序選項卡,驅動程序詳細信息頁面,在這裏你會看到這個檢查\ ptpusd.dll
也就是說,除非您的相機供應商在XP上爲您的設備精心提供了一個自定義WPD兼容INF文件。大多數沒有,可能是由於對WMP10/11的依賴。
但是,創建自己的自定義INF以啓用MTP相對比較容易,並且在「爲MTP設備提供自定義INF文件」一節的mtpdev.chm幫助文件中的Microsoft Media Transfer Protocol Porting Kit中給出了相關的詳細信息。
但是細節似乎有幾分不完整的,並且有進一步的消息將有大約在C的註釋所需的部分:與Windows Media Player 11安裝\ 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
;;
;;******************************************************************************
例如,對於一個尼康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"
爲了支持不同的設備改變,或者用正確的PID和VID添加額外的項,在[尼康]部分爲您的設備。您可以通過從下拉菜單中選擇「Hadrware Ids」在「詳細信息」選項卡的「設備管理器」中找到這些信息。如果您的相機來自不同的製造商,您可能還需要更改所有對「尼康」的參考。
一旦在記事本中創建了INF文件,請保存在適當的名稱下,例如NikonD90.INF。然後:
- 在Windows設備管理器中,右鍵單擊相機設備和「更新驅動程序」。
- 當Windows要求搜索Windows Update時,請選擇「否,不是這次」。
- 選擇「從列表或特定位置安裝(高級)」。
- 選擇「不要搜索,我會選擇要安裝的驅動器」。
- 點擊「從磁盤安裝」。
- 單擊「瀏覽器」並導航到保存上面創建的INF文件的文件夾。
- 選擇INF文件,它應該安裝MTP驅動程序。
現在在設備管理器中,您應該看到相機設備已從「成像設備」移出,現在顯示在「便攜式設備」下。同樣在驅動程序的詳細,你應該看到下面的文件表明正在使用的通用WPD MTP類驅動程序(而不是以前PTP):
- C:\ WINDOWS \ SYSTEM32 \ wpdusb.dll
- C: \ Windows \ System32 \ wudfrd.dll
您現在應該能夠使用IPortableDeviceManager.GetDevices成功枚舉您的MTP設備,並使用所有其他API函數發送自定義MTP命令。有關詳細信息,請參閱MSDN posts by dimeby8。
上述解決方案允許您使用通用Windows API通過Windows 7在32位或64位工作的通用API來構建應用程序,而不需要更改代碼。
非常感謝您的詳細解答。肯定會提供一些非常有價值的見解。即使在我的情況下不可行(對於最終用戶而言工作量太大),並且在此期間我已經設法讓WIA在XP上工作,但非常感謝您的答覆! – Marek 2011-02-16 06:47:33
你是如何設法讓WIA在XP上工作的? – 2011-09-14 19:51:51
這真的很有幫助!感謝一百萬次。它現在就像一個魅力 – giZm0 2011-10-27 09:16:07