是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