Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows XP上WPD/WIA的替代方案?_C#_.net_Windows Xp_Wia_Wpd - Fatal编程技术网

C# Windows XP上WPD/WIA的替代方案?

C# Windows XP上WPD/WIA的替代方案?,c#,.net,windows-xp,wia,wpd,C#,.net,Windows Xp,Wia,Wpd,在Windows XP SP1上无法正常工作,如果这很重要,即使 WPD的问题: IPortableDeviceManager.GetDevices调用在Win XP上找不到任何设备,但在Windows 7上找到所有连接的摄像头 其他一些人也有同样的问题,WPD不能在XP上工作,没有解决方案: 我决定使用WIA重新实现该功能 WIA自动化/WIA接口问题: WIA自动化在与摄像机交互时只提供愚蠢的对话框——我更愿意从代码中执行此操作 建议针对WIA接口进行编程,以使用WIA实现较低级别的任务。

在Windows XP SP1上无法正常工作,如果这很重要,即使

WPD的问题:

IPortableDeviceManager.GetDevices调用在Win XP上找不到任何设备,但在Windows 7上找到所有连接的摄像头

其他一些人也有同样的问题,WPD不能在XP上工作,没有解决方案:

我决定使用WIA重新实现该功能

WIA自动化/WIA接口问题:

WIA自动化在与摄像机交互时只提供愚蠢的对话框——我更愿意从代码中执行此操作 建议针对WIA接口进行编程,以使用WIA实现较低级别的任务。我没有发现任何关于如何使用来自C的WIA接口的示例,也发现一些迹象表明这根本不可能,或者至少不可能 因此,我研究了wiaaut.dll周围的WIA 2.0包装器:

我第一次收到HRESULT 0x80210006 WIA_ERROR_BUSY,然后HRESULT E_在Win XP上一直失败,而在Windows 7上,相同的代码工作正常。 我在这里没有选择。。。您能否推荐一种替代方案,为连接到Windows XP上的计算机的摄像头提供以下功能

发送已拍摄照片的通知 允许从相机下载最近拍摄的照片
微软声称安装了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文件一节

但是,其中的细节似乎有点不完整,关于随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]部分下更改或添加附加项目,并为您的设备提供正确的PID和VID。通过从下拉列表中选择Hadrware ID,可以在“详细信息”选项卡上的“设备管理器”中找到这些。如果您的相机来自不同的制造商,您可能还希望更改对尼康的所有引用

在记事本中创建INF文件后,请使用适当的名称保存,例如NikonD90.INF。然后:

在Windows设备管理器中,右键单击相机设备并更新驱动程序。 选择否,而不是在Windows要求搜索Windows Update时选择。 从列表或特定位置选择安装高级。 选择“不搜索”,我将选择要安装的驱动器。 单击havedisk。 单击浏览器并导航到保存上面创建的INF文件的文件夹。 选择INF文件,它应该安装MTP驱动程序。 现在在设备管理器中,您应该看到相机设备已从成像设备移动,现在显示在便携式设备下。此外,在驱动程序详细信息中,您应该看到以下文件,表明正在使用通用WPD MTP类驱动程序,而不是以前使用的PTP类驱动程序:

C:\Windows\System32\wpdusb.dll C:\Windows\System32\wudfrd.dll 现在,您应该能够使用IPortableDeviceManager.GetDevices成功枚举MTP设备,并使用所有其他API函数发送自定义MTP命令。有关详细信息,请参阅


上述解决方案允许您使用通用API构建32位或64位的应用程序,这些应用程序通过Windows 7在Windows XP上运行,无需更改代码。

非常感谢您提供详细的答案。这无疑提供了一些关于这个问题的非常有价值的见解。即使这在我的场景中是不可行的,但对最终用户来说将是太多的工作,同时我已经设法使WIA在XP上工作,非常感谢您的回答!这真的很有帮助!非常感谢。现在,它的工作原理就像charmWe邀请的供应商一样,他们非常有帮助,提供了一个支持xp设备的.inf文件。您甚至如何下载xp的sdk?它声称它现在已经全部集成到WindowsSDK中,而WindowsSDK只有vista、server和7的版本
[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"