[英]In WIA, How can I add my program in the program list of acquiring images from a digital camera?
當我將數碼相機與電腦連接時,會出現一個包含所有已注冊程序的對話框,以便從相機中獲取圖像。 現在我想在列表中添加我自己的程序,這樣當我點擊我的程序項目時,我可以使用我自己的程序從數碼相機中獲取圖像。
非常感謝你。
WIA有一個Device Manager對象,它提供了一個允許程序注冊事件通知的界面。
您可以使用IWiaDevMgr
界面與設備管理器進行交互。 通過調用CoCreateInstance()
獲得指向該接口的指針:
IWiaDevMgr *pWiaDevMgr;
HRESULT hr;
hr = CoCreateInstance(CLSID_WiaDevMgr,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IWiaDevMgr,
(void*)&pWiaDevMgr);
然后,在事件觸發時注冊要運行的程序非常簡單:
pWiaDevMgr->RegisterEventCallbackProgram(
WIA_REGISTER_EVENT_CALLBACK,
NULL,
&WIA_EVENT_DEVICE_CONNECTED,
bstrCommandline,
bstrName,
bstrDescription,
bstrIcon);
命令行,名稱,描述和圖標都是BSTR
因為它們通過COM接口。 您可以使用SysAllocString()
及其朋友來創建它們,也可以使用Visual C擴展或ATL提供的類來創建和管理它們。
如果您沒有為接口使用支持COM的智能指針,那么不要忘記釋放CoCreateInstance()
所引用的引用:
pWiaDevMgr->Release();
如果你不釋放它,COM系統會找到懲罰你的方法,但它可能不會立即明顯......
臨時測試顯示,當用於注冊事件的所有四個參數都准確傳遞時,刪除已注冊的事件。 電話是:
pWiaDevMgr->RegisterEventCallbackProgram(
WIA_UNREGISTER_EVENT_CALLBACK,
NULL,
&WIA_EVENT_DEVICE_CONNECTED,
bstrCommandline,
bstrName,
bstrDescription,
bstrIcon);
這是一個潛在的煩惱,因為似乎沒有記錄的API列出已注冊的事件。 這意味着如果您的安裝程序注冊了一個程序,那么它還應該記錄所使用的參數,以便卸載程序可以取消注冊該事件。
命令行可以包含字符串%1
和%2
,它們將在解析命令行之前分別由端口名稱和觸發事件的GUID替換。
插入攝像機時,圖標,名稱和說明將顯示在用戶顯示的列表中。名稱應短於描述。
該圖標是文件名和資源標識符的組合。 一個很好的默認值是"sti.dll,0"
,它將是相機和掃描儀的通用圖像。 如果您提供自己的圖標,則字符串幾乎肯定必須包含DLL的完全限定路徑。 走出困境,我想象故意在路徑中的任何地方包含一個逗號而不是資源ID之前的分隔符會導致麻煩。
WIA / STI存儲事件列表的實際位置未記錄在案。 但是,通過在regedit中進行一些搜索,我在XP SP3系統上找到了事件目錄。 有人可能會想到它會在其他系統的類似位置找到......
注冊表項HKLM\\SYSTEM\\CurrrentControlSet\\Control\\StillImage\\Events
包含系統已知的每個事件的子項。 每個鍵都有一個名為GUID的值,其中包含標識該事件的GUID。
例如, Connect
Connected事件處理程序列在Connect
子項中。
單個WIA / STI設備的鍵可以在HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}
鍵中找到。
請記住,這些位置沒有記錄。 觸摸它們需要您自擔風險,里程會有所不同,......
您需要使用WIA(Windows Image Acquisition)界面。 IWiaDevMgr提供了三種方法:RegisterEventCallbackProgram,RegisterEventCallbackCLSID和RegisterEventCallbackInterface。 如果希望Windows在用戶在“自動播放”對話框中單擊您時啟動程序,則可以使用RegisterEventCallbackProgram或RegisterEventCallbackCLSID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.