我有一个摄像头不能用vfw捕捉,需要打开这个摄像头佩戴的一个软件才能打开这个摄像头,现在想能不能在vb中通过命令打开这个随即佩戴的软件呢?然后就可以打开这个摄像头了 

解决方案 »

  1.   

    对,不过要改一下:
    shell "c:\aa.exe"
      

  2.   

     comstr = "\COM.exe"
          Shell App.Path + comstr, vbNormalFocus
      

  3.   

    使用Shell命令可以实现,这是Shell的具体用法:Shell 函数
          执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。语法Shell(pathname[,windowstyle])Shell 函数的语法含有下面这些命名参数:部分 描述 
    pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。 
    Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。 
    windowstyle 命名参数有以下这些值:常量 值 描述 
    vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。 
    VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。 
    VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。 
    VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。 
    VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。 
    VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。 
    说明如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误。注意 缺省情况下,Shell 函数是以异步方式来执行其它程序的。也就是说,用 Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。
      

  4.   

    如果不能用VFW,通常只有两种方法:
    1、DirectShow(直接用VB做不了,除非先用VB做接口)
    2、直接与驱动通讯
      

  5.   


    1 你要有视频捕捉设备
    2 正确安装在你的电脑上。
    3 新建一个VB项目,添加一个ModulePrivate 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 LongPrivate Const WS_CHILD = &H40000000
    Private Const WS_VISIBLE = &H10000000
    Private Const WM_USER = &H400
    Private Const WM_CAP_START = &H400
    Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
    Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
    Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
    Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
    Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
    Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)Private Declare Function SendMessage Lib "user32" _
     Alias "SendMessageA" ( _
     ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As LongPrivate Preview_Handle As Long
    Public Function CreateCaptureWindow( _
     hWndParent As Long, _
     Optional x As Long = 0, _
     Optional y As Long = 0, _
     Optional nWidth As Long = 320, _
     Optional nHeight As Long = 240, _
     Optional nCameraID As Long = 0) As Long Preview_Handle = capCreateCaptureWindow("Video", _
      WS_CHILD + WS_VISIBLE, x, y, _
      nWidth, nHeight, hWndParent, 1) SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0
     SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
     SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0
     SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0 CreateCaptureWindow = Preview_Handle
    End Function
    Public Function CapturePicture(nCaptureHandle As Long) As StdPicture
     Clipboard.Clear
     SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0
     Set CapturePicture = Clipboard.GetData
    End Function
    Public Sub Disconnect(nCaptureHandle As Long, _
     Optional nCameraID = 0) SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, _
      nCameraID, 0
    End Sub4 在form上添加一个PictureBox,一个按钮,Caption设为 Save Pic
    Dim Video_Handle As LongPrivate Sub Form_Load()
      Video_Handle = CreateCaptureWindow(PicCapture.hwnd)
    End SubPrivate Sub Command1_Click()
      Dim x As StdPicture
      Set x = CapturePicture(Video_Handle)
      SavePicture x, "c:\a.bmp"
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      Disconnect Video_Handle
    End Sub
      

  6.   

    如果非要 先 vfw 的话,就先调用下 vfw 然后继续....