找回密码
 加入
搜索
查看: 9372|回复: 5

[系统综合] 【已解决】怎样识别指定的PID VID USB摄像头

  [复制链接]
发表于 2011-4-9 13:07:57 | 显示全部楼层 |阅读模式
本帖最后由 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.要考虑多个摄像头的状况.还要注意配置的字段要写入...
发表于 2011-4-9 14:23:30 | 显示全部楼层
占个沙发,我也想学习一下
发表于 2011-4-9 14:51:29 | 显示全部楼层
帮顶  等待高手
 楼主| 发表于 2011-4-22 18:55:35 | 显示全部楼层
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”这个软件监测注册表改变而做出的。
发表于 2011-5-13 08:35:07 | 显示全部楼层
正在学习注册表读取,谢谢分享
发表于 2011-5-21 16:33:55 | 显示全部楼层
这个不错,MARK一下,对我也很有用。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-12 02:13 , Processed in 0.077290 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表