请问怎么判断摄像头是否被其他程序占用?

huangjacky 2009-02-02 02:07:37
rt,而且还判断下电脑是否有摄像头,貌似这个还比较好判断.
用WM_CAP_DRIVER_GET_CAPS这个消息.
最好不要说某个组件可以,然后就完了,我知道dspack可以.
我想知道自己怎么弄
...全文
2269 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjacky 2009-02-28
  • 打赏
  • 举报
回复
xx
mdejtod 2009-02-10
  • 打赏
  • 举报
回复
?
mdejtod 2009-02-10
  • 打赏
  • 举报
回复
var
m_Pmc : IMediaControl;
m_pGraph ,m_pVideo: IGraphBuilder;
m_pMS : IMediaSeeking;
m_pVCamRenderer ,p_VCamTrans: IBaseFilter;
MediaSeeking: IMediaSeeking;
MediaPosition: IMediaPosition;
Duration,CurrentPos : int64;
VideoWindow:IVideoWindow;
// m_pConfig : IVCamRenderConfig; //接口变量
m_pCamTranconfig :IVCamTransConfig;
Playing ,IsOver,IsOpenFile: Boolean;
pControl : IMediaControl; //用户命令接口,用来控制过滤器容器
pEvent : IMediaEvent; //过滤器容器事件接口
begin
PM := nil; pbc := nil;
hr := CoCreateInstance(CLSID_SystemDeviceEnum, nil,
CLSCTX_INPROC_SERVER, ICreateDevEnum, pCreateDevEnum);//创建枚举器组件
if(hr<0) then exit;
// 为指定的类型目录创建一个枚举器
hr := pCreateDevEnum.CreateClassEnumerator(CLSID_VideoInputDeviceCategory, pEnum, 0);
if(hr<0) then exit;
if (pEnum <> nil) then
begin
PEnum.Reset;
i :=0;
while (pEnum.Next(1, pM, cFetched) = S_OK) do //枚举每一个IEnumMoniker
begin
pM.BindToStorage(nil, nil, IPropertyBag, pBag);
VariantInit(varName);
pBag.Read('FriendlyName', varName, nil);//设备名称
if (idx = i) then //返回设备的名称
break
else
begin
Inc(i);
end;
end;
end;
pEnum := nil;
pCreateDevEnum := nil;
// we found it
if (pM <> nil) then
begin
pBuilder := nil;
pCapSrcFilter := nil;
CreateBindCtx(0, pbc);
pM.BindToObject(pbc, nil, IBaseFilter, pCapSrcFilter);//生成绑定到设备上的filter
pbc := nil;
eid := 0;
Test:= 'bright[-255..255]={100}, contrast[0..32]={10}';
CoCreateInstance(CLSID_CaptureGraphBuilder2, nil,CLSCTX_INPROC_SERVER, ICaptureGraphBuilder2, pBuilder);
CoCreateInstance(CLSID_FilterGraph, nil,CLSCTX_INPROC, IGraphBuilder, m_pGraph);
pBuilder.SetFiltergraph(m_pGraph);//将其添加到FILTER管理器中
// m_pGraph.AddFilter(m_pVCamRenderer, 'Renderer');
m_pGraph.AddFilter(pCapSrcFilter, 'Source');
m_pGraph.QueryInterface(IID_IMediaControl, m_pMC);
hr := pBuilder.RenderStream(nil, nil, pCapSrcFilter, nil, P_VCamTrans);//连接一个源Filter输出到下一 Filter
// hr := pBuilder.RenderStream(nil, nil, P_VCamTrans, nil, m_pVCamRenderer);//连接一个源Filter输出到下一 Filter
// if (hr<0) then Exit;
Button3.Enabled := True;
if (m_pMC <> nil) then
try
(m_pGraph as IMediaControl).Run;
pCapSrcFilter := nil;
pBuilder := nil;
pCapSrcFilter := nil;
pM := nil;
Except
end;
end;

这是我之前写过的一段代码,你整理一下就可以了
金卯刀 2009-02-04
  • 打赏
  • 举报
回复
通過 攝像頭的 端口是否被占用 來判斷

var
ErrorCode : integer;
SockAdd_In : TSockAddrIn;
begin
SockAdd_In.sin_family := PF_INET;
SockAdd_In.sin_port := htons(FPort);//端口
SockAdd_In.sin_addr.S_addr := htonl(INADDR_ANY);//監聽本機所有地址的端口
ErrorCode := bind(FSock,SockAdd_In,sizeof(SockAdd_In));//返回錯誤WSAEADDRINUSE 表示使用中


詳細錯誤代碼參考 bind的api 說明
7年 2009-02-03
  • 打赏
  • 举报
回复
占位
无条件为你 2009-02-03
  • 打赏
  • 举报
回复
开启摄像头时判断一下,如果失败了则说明被占用嘛!
hbsjz33 2009-02-02
  • 打赏
  • 举报
回复
不懂,up
noenoughmemory 2009-02-02
  • 打赏
  • 举报
回复
不懂,up
xabcxyz 2009-02-02
  • 打赏
  • 举报
回复
关注,标记一下,以后来看答案。

1,183

社区成员

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

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