【已解决】怎样识别指定的PID VID USB摄像头
本帖最后由 wangwen916 于 2011-4-22 18:56 编辑一个摄像头辅助的程序,什么摄像头都可以用,目前写一个小程序调用,判断PID VID是否是自家的,如果不是将不启动程序,正确就启动。
用程序监控发现USB摄像头插入的话,这3个注册表选项有改变。但是判断注册表的值貌似3个都不完全。。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbvideo
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbccgp\Enum
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mpfilt\Enum
不知道判定哪个好。
另外获取$name=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbvideo\Enum","1");读USB摄像头特征,就是不知道读哪个不会遗漏.
;~ ClipPut ($name)
;USB\Vid_1871&Pid_7670&MI_00\6&56af0e2&0&0000
$name=StringReplace($name,"\","#");替换字符串
$yanzheng=StringLeft($name,27);截取需要的字段方便对比
$val=StringCompare("USB#Vid_1871&Pid_7670&MI_00",$yanzheng);对比字段 判定PID VID正确否
ClipPut ($yanzheng);复制到剪贴板
If $val=0 Then
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VfWWDM Mapper\##?"&$name&"#{65e8773d-8f56-11d0-a3b9-00a0c9223196}#global","BitmapInfo","REG_BINARY","0x2800000040010000F000000001001000595559320058020000000000000000000000000000000000");写USB摄像头的配置
Run("run.exe");运行真正的程序
请多多指教.PS:不一定要用注册表的方法.或者像BBS里面那个U盘监测一样??!!!
只要实现功能就OK.要考虑多个摄像头的状况.还要注意配置的字段要写入... 占个沙发,我也想学习一下 帮顶等待高手 For $x= 1 to 10 ;遍历所有摄像头实例 PID VID
$vvv = RegEnumVal("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbvideo\Enum", $x) ;扫描第一所有项目
If @error <> 0 then ExitLoop
$name=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\usbvideo\Enum",$vvv) ;读摄像头PID与VID
;~ MsgBox(262144,"1",$name) ;调试
$name=StringReplace($name,"\","#") ;格式化字段
$yanzheng=StringLeft($name,21) ;截取所需要的字段
$val=StringCompare("USB#Vid_XXXX&Pid_XXXX",$yanzheng) ;对比字段 判定PID VID正确否
If $val=0 Then ;如果硬件正确
Run("run.dll") ;运行主程序
ProcessWait("run.dll",5) ;等待程序运行
ProcessWaitClose("run.dll") ;等待程序退出
Exit
EndIf
Next 另外还有一个注册表选项For $x= 1 to 10 ;遍历所有摄像头实例 PID VID
$vvv = RegEnumVal("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XXXX\Enum", $x) ;扫描第一所有项目
If @error <> 0 then ExitLoop
$name=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\XXXX\Enum",$vvv) ;读摄像头PID与VID
;~ MsgBox(262144,"1",$name) ;调试
$name=StringReplace($name,"\","#") ;格式化字段
$yanzheng=StringLeft($name,21) ;截取所需要的字段
$val=StringCompare("USB#Vid_XXXX&Pid_XXXX",$yanzheng) ;对比字段 判定PID VID正确否
If $val=0 Then ;如果硬件正确这样就可以扫描一下当前USB有没有自己需要的摄像头。。。。本人原创,欢迎抛砖。
本人通过“Total_Uninstall”这个软件监测注册表改变而做出的。 正在学习注册表读取,谢谢分享 这个不错,MARK一下,对我也很有用。
页:
[1]