【发布时间】:2017-02-22 06:17:21
【问题描述】:
我正在开发一个网络摄像头应用程序,并希望重新使用看似标准的相机控件对话框(那些配置网络摄像头设置的对话框,如亮度、缩放、闪烁补偿等)。经过一番挖掘,我发现必要的对话框资源位于 vfwwdm32.dll 中,对话框 ID 为 102 和 405。是的,这是一个 DLL,用于大约 1992 年的古代 Video For Windows。
对话框资源可通过 DirectShow 访问,如本 MSDN article 中所述,使用 IAMVfwCaptureDialogs 提供的接口。
问题 #1:
我是不是走错了路?如果我应该在 Windows 中使用这些对话框的另一个(更现代)实现?
我想通过从 WDM 本身查询可用控件来避免使用构建我自己的 GUI 的“首选”方法来重新实现这些,而只使用 MS 已经构建的对话框。特别是因为它们非常适合我的需求。
问题 #2(主要问题):
鉴于我的应用程序不是基于 DirectShow 的(它是基于 MS Media Foundation 的)我不想依赖 DirectShow遗产。这意味着我使用Displaying a dialog resource from... 中描述的方法,基本上可以归结为LoadLibrary()->FindResource()->LoadResource()->LockResource()->CreateDialogIndirectParam()。
我遇到的问题是对话框需要知道要控制哪个相机。这大概是通过对话框的输入参数来完成的(我使用这个术语是松散的,因为它不是一个真正的函数,而是一个 对话框数据交换 过程)。
如何向对话框提供必要的信息,以便它与我选择的相机正常工作?
更一般地说:如何与那个对话框实现数据交换?
【问题讨论】:
-
执行
CreateDialogIndirect()方法仍然需要您自己编写对话逻辑;您将负责该对话框的所有逻辑,除非该对话框过程也被导出。 -
那么通过DirectShow 的
IAMVfwCaptureDialogs路由是唯一的方法吗? :( -
由于您正在处理旧的Video For Windows 技术,您可能正在寻找
AVICapAPI(capCreateCaptureWindow()、capDlgVideoFormat()、capDlgVideoDisplay()等)。见Displaying Dialog Boxes to Set Video Characteristics。 -
我想我不够清楚,但我不是在处理 VFW。我正在处理 MS Media Foundation 并试图避免使用 DirectShow 路径。
-
嗨,我认为应该尝试另一种方式 - 尝试直接通过现场
DeviceIoControl- USB Video Class Properties 使用所选相机设备的驱动程序。它允许更改相机设置,如设备设置(相机是设备)。它没有用户对话窗口——因此,您需要编写自己的 GUI,但您可以更改代码级别的选项。顺便说一句 - 你必须使用SymbolicLink的相机为DeviceIoControl- 相机是设备。
标签: winapi dll dialog webcam webcam-capture