您的位置:程序门 -> vb -> 多媒体



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


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


编程:如何检测是否有程序在用摄象头? [无满意答案结贴]
发表于:2007-12-07 13:46:02 楼主
如题:
如何检测是否有程序在用摄象头?  
发表于:2007-12-08 13:14:021楼 得分:0
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

用这个创建一个视频窗口,创建失败的话应该就是使用中了吧…………没测试过…………
发表于:2007-12-08 15:53:242楼 得分:0
这是普通的做法,但是有个特殊的情况

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


很是郁闷啊。。。。。。
发表于:2007-12-08 22:11:393楼 得分:0
這個   api   capdriverconnect,看看
发表于:2007-12-09 00:22:444楼 得分:0
capdriverconnect,没有这个api,这是一个被定义的函数,内容就是
sendmessage_long(caphwnd,               wm_cap_driver_connect,               ndriverindex,               0&)    


快速检索

最新资讯
热门点击