2010-05-25 83 views
4

WPD在Windows XP(SP1無法正常工作)時無法正常工作,即使Microsoft states it doesWindows XP上WPD/WIA的替代品?

問題與WPD:

IPortableDeviceManager.GetDevices呼叫沒有找到在Win XP的任何設備,同時發現在Windows上的所有連接的攝像機7.

其他幾個人沒有工作的人與WPD同樣的問題在XP中,無解: 1 2

我決定重新實現使用WIA功能。

問題的WIA自動化/ WIA接口:用相機進行交互時

  • WIA automation只提供愚蠢的對話 - 我需要,而做到這一點,從代碼
  • WIA interfaces規劃建議,以實現較低的水平WIA的任務。我還沒有發現任何樣品如何使用WIA接口從C#(也發現一些跡象表明,這是不可能的,在所有或至少very hard to do

因此我已經看過WIA 2.0(約wiaaut.dll包裝):

  • 我在Win XP獲得HRESULT 0x80210006(WIA_ERROR_BUSY)首次然後HRESULT E_FAIL所有的時間,而在Windows 7中相同的代碼工作沒有問題。

我要離開這裏選擇... 你能推薦別的選擇,以提供連接到在Windows XP下運行的電腦攝像頭以下特點?

  • 發送一個拍攝照片
  • 允許從相機

回答

8
是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來構建應用程序,而不需要更改代碼。

+0

非常感謝您的詳細解答。肯定會提供一些非常有價值的見解。即使在我的情況下不可行(對於最終用戶而言工作量太大),並且在此期間我已經設法讓WIA在XP上工作,但非常感謝您的答覆! – Marek 2011-02-16 06:47:33

+0

你是如何設法讓WIA在XP上工作的? – 2011-09-14 19:51:51

+0

這真的很有幫助!感謝一百萬次。它現在就像一個魅力 – giZm0 2011-10-27 09:16:07