编程:如何检测是否有程序在用摄象头?

jf110 2007-12-07 01:46:02
如题:
如何检测是否有程序在用摄象头?
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jf110 2007-12-09
  • 打赏
  • 举报
回复
capDriverConnect,没有这个API,这是一个被定义的函数,内容就是
SendMessage_Long(CapHWnd, WM_CAP_DRIVER_CONNECT, nDriverIndex, 0&)
cangwu_lee 2007-12-08
  • 打赏
  • 举报
回复
這個 API capDriverConnect,看看
jf110 2007-12-08
  • 打赏
  • 举报
回复
这是普通的做法,但是有个特殊的情况

当一个程序已经打开了摄象头,我的程序再打开的话,
SendMessage_Long(CapHWnd, WM_CAP_DRIVER_CONNECT, nDriverIndex, 0&)
到这步的时候,会先跳出一个视频源的对话框,一定要把这个对话框关闭以后,然后才能得到返回值


很是郁闷啊。。。。。。
tzwsoho 2007-12-08
  • 打赏
  • 举报
回复
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long

Sub Get_CaptureWindow(Optional ByVal nm As Long = 0)
'建立一个可抽取的窗口
'nm 为,若不只一个抽取装置的话,指定装置代号
CapHWnd = capCreateCaptureWindow("", WS_CHILD Or WS_VISIBLE, 0, 0, 160, 120, Screen.ActiveForm.hwnd, 0)
Call Connect_CaptureDriver(nm)
End Sub

Function Connect_CaptureDriver(ByVal nDriverIndex As Long) As Boolean
'链接到抽取装置
Dim retVal As Boolean
Dim Caps As CAPDRIVERCAPS
Dim I As Long
'Debug.Assert (nDriverIndex < 10) And (nDriverIndex >= 0)
'链接到抽取窗口的界面
retVal = SendMessage_Long(CapHWnd, WM_CAP_DRIVER_CONNECT, nDriverIndex, 0&)
If retVal = False Then Exit Function
'返回抽取界面的能力
retVal = SendMessage_Any(CapHWnd, WM_CAP_DRIVER_GET_CAPS, Len(Caps), Caps)
'设置每毫秒预览的速度
Call Set_PreviewRate(CapHWnd, 66) '15 FPS
'激活摄影机的预览图像
Call Set_Preview
'重新调整抽取窗口为全部占满图像
Call ResizeCaptureWindow
Connect_CaptureDriver = True
End Function

用这个创建一个视频窗口,创建失败的话应该就是使用中了吧…………没测试过…………

807

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧