簡體   English   中英

在WIA中,如何在從數碼相機獲取圖像的程序列表中添加我的程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM