首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WIA中,如何将我的程序添加到从数码相机获取图像的程序列表中?

在WIA中,如何将我的程序添加到从数码相机获取图像的程序列表中?
EN

Stack Overflow用户
提问于 2008-11-28 02:24:58
回答 2查看 4K关注 0票数 3

当我将我的数码相机与我的计算机连接时,将出现一个对话框,其中包含可用于从相机获取图像的所有注册程序。现在我想在列表中添加我自己的程序,这样当我单击我的程序的项目时,我就可以使用我自己的程序从数码相机获取图像。

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2009-06-27 00:57:16

WIA有一个设备管理器对象,它提供了一个允许程序注册事件通知的接口。

联系设备管理器

您可以使用IWiaDevMgr接口与设备管理器进行交互。通过调用CoCreateInstance(),您可以获得指向该接口的指针

代码语言:javascript
复制
    IWiaDevMgr *pWiaDevMgr;
    HRESULT hr;
    hr = CoCreateInstance(CLSID_WiaDevMgr,
        NULL,
        CLSCTX_LOCAL_SERVER,
        IID_IWiaDevMgr,
        (void*)&pWiaDevMgr);

为事件注册程序

然后,注册要在事件触发时运行的程序就像下面这样简单:

代码语言:javascript
复制
pWiaDevMgr->RegisterEventCallbackProgram(
    WIA_REGISTER_EVENT_CALLBACK,
    NULL,
    &WIA_EVENT_DEVICE_CONNECTED,
    bstrCommandline,
    bstrName,
    bstrDescription,
    bstrIcon);

命令行、名称、描述和图标都是BSTR,因为它们是通过COM接口传递的。您可以使用SysAllocString()和它的朋友来创建它们,或者使用Visual C扩展或ATL提供的类来创建和管理它们。

释放设备管理器

如果您没有使用COM感知的智能指针作为接口,那么不要忘记释放由CoCreateInstance()获取的引用

代码语言:javascript
复制
    pWiaDevMgr->Release();

如果你不释放它,COM系统会找到惩罚你的方法,但它可能不会立即显现出来……

取消注册

随机测试表明,当用于注册事件的所有四个参数都被准确传递时,删除注册的事件就会起作用。调用是:

代码语言:javascript
复制
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子键中。

可以在HKLM\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}密钥以及其他位置找到各个WIA/STI设备的密钥。

请记住,这些位置未记录在案。你自己承担风险,你的里程数会有所不同,...

票数 7
EN

Stack Overflow用户

发布于 2009-01-21 11:54:43

您需要使用WIA (Windows图像采集)接口。IWiaDevMgr提供了三种方法来实现这一点: RegisterEventCallbackProgram、RegisterEventCallbackCLSID和RegisterEventCallbackInterface。如果您希望Windows在用户单击“自动播放”对话框中的您时启动您的程序,您可以使用RegisterEventCallbackProgram或RegisterEventCallbackCLSID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/324974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档