Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 控件  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701932
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

Access能否控制各种外设?比如摄像头、传真modem、GSM短信猫?

作者:cg1  摘自:access911.net  :cg1  更新日期:2007-3-14  浏览人次:

 

问题:

Access能否控制各种外设?比如摄像头、传真modem、GSM短信猫、扫描仪、考勤机?
比如我在做员工信息数据库时,填写到员工身份证一栏时自动调用扫描仪扫描员工身份证?

 

回答:

ACCESS本身并没有对某个硬件外设的驱动能力,ACCESS 控制外设都有通过该外设厂商提供的硬件开发包来实现(SDK)。比如,ACCESS 能够通过调用硬件厂商提供的 dll 类库对盘点器(一种能存储多个条形码的条码扫描枪)进行控制,控制其扫描或者读取其中的信息。

一般的操作步骤是:
1、购买硬件
2、获取厂商提供的硬件开发包,一般是 DLL 或者 OCX 文件以及对接口进行解释的开发文档
3、在客户机上注册 DLL 或者 OCX
4、如果是 DLL ,在ACCESS 的 VBA 编辑器界面的菜单 -> 工具 -> 引用 中添加对该类库的引用;
5、如果是 OCX ,在 ACCESS 窗体上添加该 OCX
6、根据开发文档进行编程,比如 
dim a as 扫描仪类库.类名
a.Connect()      '连接扫描仪
a.Scan()         '扫描仪进行扫描
a.SaveToFile()   '将扫描的结果保存为文件


上述代码只是假设,各种外设SDK的调用方式以厂方提供的开发文档为准。

很多网友误以为只要学好串口通信控件 MSComm 控件就可以对支持串口通信的硬件进行二次开发了,其实不然。各个硬件虽然都通过串口通信,但是发送接受数据的格式、编码的方式都不通,这需要硬件厂商提供相关的参考文档才能进行开发的,否则控件发送的数据硬件根本不认识,如何操控这个硬件呢? 


针对摄像头,WINDOWS 内置了一个通用的 API 类,avicap32.dll,在 WINDOWS\SYSTEM32 目录下,大家可以在 GOOGLE 上搜索 avicap32.dll 得知一些有关该函数的调用方法。比如:
http://topic.csdn.net/t/20000529/14/10062.html

申明部分:   
    
  'capture   window   function   
  Public   Const   WS_CHILD   =   &H40000000   
  Public   Const   WS_VISIBLE   =   &H10000000   
    
  Public   Const   MAXVIDDRIVERS   =   10   
    
  Public   Declare   Function   capCreateCaptureWindow   Lib   "avicap32"   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   
  Public   Declare   Function   DestroyWindow   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long   
    
  'capture   window   messages   
  Public   Const   WM_USER   =   &H400   
    
  Public   Const   WM_CAP_START   =   WM_USER   
    
  'Public   Const   WM_CAP_UNICODE_START   =   WM_USER   +   100   
    
  'Public   Const   WM_CAP_SET_CALLBACK_ERROR   =   (WM_CAP_START   +   2)   
  'Public   Const   WM_CAP_SET_CALLBACK_STATUS   =   (WM_CAP_START   +   3)   
    
  'Public   Const   WM_CAP_SET_CALLBACK_YIELD   =   (WM_CAP_START   +   4)   
  Public   Const   WM_CAP_SET_CALLBACK_FRAME   =   (WM_CAP_START   +   5)   
  'Public   Const   WM_CAP_SET_CALLBACK_VIDEOSTREAM   =   (WM_CAP_START   +   6)   
  'Public   Const   WM_CAP_SET_CALLBACK_WAVESTREAM   =   (WM_CAP_START   +   7)   
  'Public   Const   WM_CAP_GET_USER_DATA   =   (WM_CAP_START   +   8)   
  'Public   Const   WM_CAP_SET_USER_DATA   =   (WM_CAP_START   +   9)   
    
  Public   Const   WM_CAP_DRIVER_CONNECT   =   (WM_CAP_START   +   10)   
  Public   Const   WM_CAP_DRIVER_DISCONNECT   =   (WM_CAP_START   +   11)   
    
  'Public   Const   WM_CAP_DRIVER_GET_NAME   =   (WM_CAP_START   +   12)   
  'Public   Const   WM_CAP_DRIVER_GET_VERSION   =   (WM_CAP_START   +   13)   
    
  'Public   Const   WM_CAP_DRIVER_GET_CAPS   =   (WM_CAP_START   +   14)   
    
  'Public   Const   WM_CAP_FILE_SET_CAPTURE_FILEA   =   (WM_CAP_START   +   20)   
  'Public   Const   WM_CAP_FILE_GET_CAPTURE_FILEA   =   (WM_CAP_START   +   21)   
  'Public   Const   WM_CAP_FILE_SAVEASA   =   (WM_CAP_START   +   23)   
  'Public   Const   WM_CAP_FILE_SAVEDIBA   =   (WM_CAP_START   +   25)   
  '//   out   of   order   to   save   on   ifdefs   
  'Public   Const   WM_CAP_FILE_ALLOCATE   =   (WM_CAP_START   +   22)   
  'Public   Const   WM_CAP_FILE_SET_INFOCHUNK   =   (WM_CAP_START   +   24)   
    
  'Public   Const   WM_CAP_EDIT_COPY   =   (WM_CAP_START   +   30)   
    
  'Public   Const   WM_CAP_SET_AUDIOFORMAT   =   (WM_CAP_START   +   35)   
  'Public   Const   WM_CAP_GET_AUDIOFORMAT   =   (WM_CAP_START   +   36)   
    
  Public   Const   WM_CAP_DLG_VIDEOFORMAT   =   (WM_CAP_START   +   41)   
  Public   Const   WM_CAP_DLG_VIDEOSOURCE   =   (WM_CAP_START   +   42)   
  Public   Const   WM_CAP_DLG_VIDEODISPLAY   =   (WM_CAP_START   +   43)   
  Public   Const   WM_CAP_GET_VIDEOFORMAT   =   (WM_CAP_START   +   44)   
  'Public   Const   WM_CAP_SET_VIDEOFORMAT   =   (WM_CAP_START   +   45)   
  Public   Const   WM_CAP_DLG_VIDEOCOMPRESSION   =   (WM_CAP_START   +   46)   
    
  Public   Const   WM_CAP_SET_PREVIEW   =   (WM_CAP_START   +   50)   
  Public   Const   WM_CAP_SET_OVERLAY   =   (WM_CAP_START   +   51)   
  Public   Const   WM_CAP_SET_PREVIEWRATE   =   (WM_CAP_START   +   52)   
  Public   Const   WM_CAP_SET_SCALE   =   (WM_CAP_START   +   53)   
  'Public   Const   WM_CAP_GET_STATUS   =   (WM_CAP_START   +   54)   
  'Public   Const   WM_CAP_SET_SCROLL   =   (WM_CAP_START   +   55)   
    
  'Public   Const   WM_CAP_GRAB_FRAME   =   (WM_CAP_START   +   60)   
  'Public   Const   WM_CAP_GRAB_FRAME_NOSTOP   =   (WM_CAP_START   +   61)   
    
  'Public   Const   WM_CAP_SEQUENCE   =   (WM_CAP_START   +   62)   
  'Public   Const   WM_CAP_SEQUENCE_NOFILE   =   (WM_CAP_START   +   63)   
  'Public   Const   WM_CAP_SET_SEQUENCE_SETUP   =   (WM_CAP_START   +   64)   
  'Public   Const   WM_CAP_GET_SEQUENCE_SETUP   =   (WM_CAP_START   +   65)   
    
  'Public   Const   WM_CAP_SET_MCI_DEVICEA   =   (WM_CAP_START   +   66)   
  'Public   Const   WM_CAP_GET_MCI_DEVICEA   =   (WM_CAP_START   +   67)   
  'Public   Const   WM_CAP_STOP   =   (WM_CAP_START   +   68)   
  'Public   Const   WM_CAP_ABORT   =   (WM_CAP_START   +   69)   
    
  'Public   Const   WM_CAP_SINGLE_FRAME_OPEN   =   (WM_CAP_START   +   70)   
  'Public   Const   WM_CAP_SINGLE_FRAME_CLOSE   =   (WM_CAP_START   +   71)   
  'Public   Const   WM_CAP_SINGLE_FRAME   =   (WM_CAP_START   +   72)   
    
  'Public   Const   WM_CAP_PAL_OPENA   =   (WM_CAP_START   +   80)   
  'Public   Const   WM_CAP_PAL_SAVEA   =   (WM_CAP_START   +   81)   
    
  'Public   Const   WM_CAP_PAL_PASTE   =   (WM_CAP_START   +   82)   
  'Public   Const   WM_CAP_PAL_AUTOCREATE   =   (WM_CAP_START   +   83)   
  'Public   Const   WM_CAP_PAL_MANUALCREATE   =   (WM_CAP_START   +   84)   
    
  '//   Following   added   post   VFW   1.1   
  'Public   Const   WM_CAP_SET_CALLBACK_CAPCONTROL   =   (WM_CAP_START   +   85)   
    
  Public   Const   WM_PAINT   =   &HF   
  Public   Declare   Function   SendMessage   Lib   "user32"   Alias   "SendMessageA"   (ByVal   hwnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long   
  'Public   Declare   Function   PostMessage   Lib   "user32"   Alias   "PostMessageA"   (ByVal   hwnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   lParam   As   Any)   As   Long   
  'Public   Declare   Function   GetParent   Lib   "user32"   (ByVal   hwnd   As   Long)   As   Long   
    
  Public   Const   SWP_NOZORDER   =   &H4   
  Public   Const   SWP_NOMOVE   =   &H2   
  Public   Declare   Function   SetWindowPos   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   hWndInsertAfter   As   Long,   ByVal   x   As   Long,   ByVal   y   As   Long,   ByVal   cx   As   Long,   ByVal   cy   As   Long,   ByVal   wFlags   As   Long)   As   Long   
    
  'video   buffer   struct   
  Type   VIDEOHDR   
          lpData     As   Long       ';                                   /*   pointer   to   locked   data   buffer   */   
          dwBufferLength     As   Long           ';                   /*   Length   of   data   buffer   */   
          dwBytesUsed   As   Long   '                         /*   Bytes   actually   used   */   
          dwTimeCaptured     As   Long   '                   /*   Milliseconds   from   start   of   stream   */   
          dwUser     As   Long   '                                   /*   for   client's   use   */   
          dwFlags   As   Long   '                                 /*   assorted   flags   (see   defines)   */   
          dwReserved(3)       As   Long                       '/*   reserved   for   driver   */   
  End   Type   
    
  ......   
    
    
  代码部分:   
    
  Private   Sub   UserControl_Initialize()   
          If   glpLocalBuf   Then   Err.Raise   47   
            
          hWndCap   =   capCreateCaptureWindow("Local   Video",   WS_CHILD   Or   WS_VISIBLE,   0,   0,   0,   0,   hwnd,   0)   
            
          If   hWndCap   =   0   Then   Err.Raise   7   
                    
          If   SendMessage(hWndCap,   WM_CAP_SET_CALLBACK_FRAME,   0,   ByVal   GetProcAddress(AddressOf   VideoCallbackProc))   =   0   Then   
                  DestroyWindow   hWndCap   
                    
                  Err.Raise   7   
          End   If   
            
  ......   


    


vb下视频捕捉中的问题

作者:admin    转贴自:csdn    点击数:347

 

  
下面是一个视频捕捉的一个例子,希望对您有用。

Public Const WM_USER = &H400
Public Const WM_CAP_START = WM_USER
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Public Const WM_CAP_SEQUENCE = WM_CAP_START + 62
Public Const WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64
Public Const WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65


Type CAPTUREPARMS
    dwRequestMicroSecPerFrame As Long       '// Requested capture rate
    fMakeUserHitOKToCapture As Long         '// Show Hit OK to cap dlg?
    wPercentDropForError As Long            '// Give error msg if > (10%)
    fYield As Long                          '// Capture via background task?
    dwIndexSize As Long                     '// Max index size in frames (32K)
    wChunkGranularity As Long               '// Junk chunk granularity (2K)
    fUsingDOSMemory As Long                 '// Use DOS buffers?
    wNumVideoRequested As Long              '// # video buffers, If 0, autocalc
    fCaptureAudio As Long                   '// Capture audio?
    wNumAudioRequested As Long              '// # audio buffers, If 0, autocalc
    vKeyAbort As Long                       '// Virtual key causing abort
    fAbortLeftMouse As Long                 '// Abort on left mouse?
    fAbortRightMouse As Long                '// Abort on right mouse?
    fLimitEnabled As Long                   '// Use wTimeLimit?
    wTimeLimit As Long                      '// Seconds to capture
    fMCIControl As Long                     '// Use MCI video source?
    fStepMCIDevice As Long                  '// Step MCI device?
    dwMCIStartTime As Long                  '// Time to start in MS
    dwMCIStopTime As Long                   '// Time to stop in MS
    fStepCaptureAt2x As Long                '// Perform spatial averaging 2x
    wStepCaptureAverageFrames As Long       '// Temporal average n Frames
    dwAudioBufferSize As Long               '// Size of audio bufs (0 = default)
    fDisableWriteCache As Long              '// Attempt to disable write cache
End Type

Function capFileSaveAs(ByVal lwnd As Long, szName As String) As Boolean
   capFileSaveAs = SendMessageS(lwnd, WM_CAP_FILE_SAVEAS, 0, szName)
End Function


Function capCaptureSequence(ByVal lwnd As Long) As Boolean
   capCaptureSequence = SendMessage(lwnd, WM_CAP_SEQUENCE, 0, 0)
End Function


Function capCaptureGetSetup(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capCaptureGetSetup = SendMessage(lwnd, WM_CAP_GET_SEQUENCE_SETUP, wSize, s)
End Function

Private Sub mnuStart_Click()
' /*
'  * If Start is selected from the menu, start Streaming capture.
'  * The streaming capture is terminated when the Escape key is pressed
'  */
    
    Dim sFileName As String
    Dim CAP_PARAMS As CAPTUREPARMS
    
    capCaptureGetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
    
    CAP_PARAMS.dwRequestMicroSecPerFrame = (1 * (10 ^ 6)) / 30  ' 30 Frames per second
    CAP_PARAMS.fMakeUserHitOKToCapture = True
    CAP_PARAMS.fCaptureAudio = False
    
    capCaptureSetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
    
    sFileName = C:\myvideo.avi
    
    capCaptureSequence lwndC  ' Start Capturing!
    capFileSaveAs lwndC, sFileName  ' Copy video from swap file into a real file.

End Sub


  
 

'// ------------------------------------------------------------------
'//  Windows API Constants / Types / Declarations
'// ------------------------------------------------------------------
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000
Public Const WS_SYSMENU = &H80000
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000
Public Const WS_OVERLAPPED = &H0&
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_THICKFRAME = &H40000
Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = 1
Public Const SWP_NOZORDER = &H4
Public Const HWND_BOTTOM = 1
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SM_CYCAPTION = 4
Public Const SM_CXFRAME = 32
Public Const SM_CYFRAME = 33
Public Const WS_EX_TRANSPARENT = &H20&
Public Const GWL_STYLE = (-16)
Declare Function SetWindowLong Lib user32 Alias SetWindowLongA (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


'// Memory manipulation
Declare Function lStrCpy Lib kernel32 Alias lstrcpyA (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
Declare Function lStrCpyn Lib kernel32 Alias lstrcpynA (ByVal lpString1 As Any, ByVal lpString2 As Long, ByVal iMaxLength As Long) As Long
Declare Sub RtlMoveMemory Lib kernel32 (ByVal hpvDest As Long, ByVal hpvSource As Long, ByVal cbCopy As Long)
Declare Sub hmemcpy Lib kernel32 (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    
'// Window manipulation
Declare Function SetWindowPos Lib user32 (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function DestroyWindow Lib user32 (ByVal hndw As Long) As Boolean
Declare Function GetSystemMetrics Lib user32 (ByVal nIndex As Long) As Long
Declare Function SetWindowText Lib user32 Alias SetWindowTextA (ByVal hWnd As Long, ByVal lpString As String) As Long

Public lwndC As Long       ' Handle to the Capture Windows

Function MyFrameCallback(ByVal lwnd As Long, ByVal lpVHdr As Long) As Long

    Debug.Print FrameCallBack
    
    Dim VideoHeader As VIDEOHDR
    Dim VideoData() As Byte
    
    '//Fill VideoHeader with data at lpVHdr
    RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader)
    
    '// Make room for data
    ReDim VideoData(VideoHeader.dwBytesUsed)
    
    '//Copy data into the array
    RtlMoveMemory VarPtr(VideoData(0)), VideoHeader.lpData, VideoHeader.dwBytesUsed

    Debug.Print VideoHeader.dwBytesUsed
    Debug.Print VideoData
    
End Function

Function MyYieldCallback(lwnd As Long) As Long

    Debug.Print Yield

End Function

Function MyErrorCallback(ByVal lwnd As Long, ByVal iID As Long, ByVal ipstrStatusText As Long) As Long
    
    If iID = 0 Then Exit Function
    
    Dim sStatusText As String
    Dim usStatusText As String
    
    'Convert the Pointer to a real VB String
    sStatusText = String$(255, 0)                                      '// Make room for message
    lStrCpy StrPtr(sStatusText), ipstrStatusText                       '// Copy message into String
    sStatusText = Left$(sStatusText, InStr(sStatusText, Chr$(0)) - 1)  '// Only look at left of null
    usStatusText = StrConv(sStatusText, vbUnicode)                     '// Convert Unicode
            
    LogError usStatusText, iID

End Function

Function MyStatusCallback(ByVal lwnd As Long, ByVal iID As Long, ByVal ipstrStatusText As Long) As Long

    If iID = 0 Then Exit Function
   
    Dim sStatusText As String
    Dim usStatusText As String
    
    '// Convert the Pointer to a real VB String
    sStatusText = String$(255, 0)                                      '// Make room for message
    lStrCpy StrPtr(sStatusText), ipstrStatusText                       '// Copy message into String
    sStatusText = Left$(sStatusText, InStr(sStatusText, Chr$(0)) - 1)  '// Only look at left of null
    usStatusText = StrConv(sStatusText, vbUnicode)                     '// Convert Unicode
    
    frmMain.StatusBar.SimpleText = usStatusText
    Debug.Print Status: , usStatusText, iID

    Select Case iID '

    
    End Select


End Function

Sub ResizeCaptureWindow(ByVal lwnd As Long)

    Dim CAPSTATUS As CAPSTATUS
    Dim lCaptionHeight As Long
    Dim lX_Border As Long
    Dim lY_Border As Long
    
    
    lCaptionHeight = GetSystemMetrics(SM_CYCAPTION)
    lX_Border = GetSystemMetrics(SM_CXFRAME)
    lY_Border = GetSystemMetrics(SM_CYFRAME)
    
    '// Get the capture window attributes .. width and height
    If capGetStatus(lwnd, VarPtr(CAPSTATUS), Len(CAPSTATUS)) Then
        
        '// Resize the capture window to the capture sizes
        SetWindowPos lwnd, HWND_BOTTOM, 0, 0, _
                           CAPSTATUS.uiImageWidth + (lX_Border * 2), _
                           CAPSTATUS.uiImageHeight + lCaptionHeight + (lY_Border * 2), _
                           SWP_NOMOVE Or SWP_NOZORDER
    End If

    Debug.Print Resize Window.

End Sub

Function MyVideoStreamCallback(lwnd As Long, lpVHdr As Long) As Long

    Beep  '// Replace this with your code!
  
End Function

Function MyWaveStreamCallback(lwnd As Long, lpVHdr As Long) As Long

    Debug.Print WaveStream

End Function

Sub LogError(txtError As String, lID As Long)

    frmMain.StatusBar.SimpleText = txtError
    Debug.Print Error: , txtError, lID
 
End Sub

'// ------------------------------------------------------------------
'//  Windows API Constants / Types / Declarations
'// ------------------------------------------------------------------
Public Const WM_USER = &H400
Type POINTAPI
        x As Long
        y As Long
End Type
Declare Function SendMessage Lib user32 Alias SendMessageA (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Declare Function SendMessageS Lib user32 Alias SendMessageA (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long

'// ------------------------------------------------------------------
'//  Window Messages  WM_CAP... which can be sent to an AVICAP window
'// ------------------------------------------------------------------

'// Defines start of the message range
Public Const WM_CAP_START = WM_USER

Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1

Public Const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2
Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4
Public Const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5
Public Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7
Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8
Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9
    
Public Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
Public Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12
Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14

Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25

Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30

Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36

Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43
Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46

Public Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50
Public Const WM_CAP_SET_OVERLAY = WM_CAP_START + 51
Public Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52
Public Const WM_CAP_SET_SCALE = WM_CAP_START + 53
Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54
Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55

Public Const WM_CAP_GRAB_FRAME = WM_CAP_START + 60
Public Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61

Public Const WM_CAP_SEQUENCE = WM_CAP_START + 62
Public Const WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63
Public Const WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64
Public Const WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65
Public Const WM_CAP_SET_MCI_DEVICE = WM_CAP_START + 66
Public Const WM_CAP_GET_MCI_DEVICE = WM_CAP_START + 67
Public Const WM_CAP_STOP = WM_CAP_START + 68
Public Const WM_CAP_ABORT = WM_CAP_START + 69

Public Const WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70
Public Const WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71
Public Const WM_CAP_SINGLE_FRAME = WM_CAP_START + 72

Public Const WM_CAP_PAL_OPEN = WM_CAP_START + 80
Public Const WM_CAP_PAL_SAVE = WM_CAP_START + 81
Public Const WM_CAP_PAL_PASTE = WM_CAP_START + 82
Public Const WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83
Public Const WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84

'// Following added post VFW 1.1
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85

'// Defines end of the message range
Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL

'// ------------------------------------------------------------------
'//  Structures
'// ------------------------------------------------------------------
Type CAPDRIVERCAPS
    wDeviceIndex As Long '               // Driver index in system.ini
    fHasOverlay As Long '                // Can device overlay?
    fHasDlgVideoSource As Long '         // Has Video source dlg?
    fHasDlgVideoFormat As Long '         // Has Format dlg?
    fHasDlgVideoDisplay As Long '        // Has External out dlg?
    fCaptureInitialized As Long '        // Driver ready to capture?
    fDriverSuppliesPalettes As Long '    // Can driver make palettes?
    hVideoIn As Long '                   // Driver In channel
    hVideoOut As Long '                  // Driver Out channel
    hVideoExtIn As Long '                // Driver Ext In channel
    hVideoExtOut As Long '               // Driver Ext Out channel
End Type

Type CAPSTATUS
    uiImageWidth As Long                    '// Width of the image
    uiImageHeight As Long                   '// Height of the image
    fLiveWindow As Long                     '// Now Previewing video?
    fOverlayWindow As Long                  '// Now Overlaying video?
    fScale As Long                          '// Scale image to client?
    ptScroll As POINTAPI                    '// Scroll position
    fUsingDefaultPalette As Long            '// Using default driver palette?
    fAudioHardware As Long                  '// Audio hardware present?
    fCapFileExists As Long                  '// Does capture file exist?
    dwCurrentVideoFrame As Long             '// # of video frames cap'td
    dwCurrentVideoFramesDropped As Long     '// # of video frames dropped
    dwCurrentWaveSamples As Long            '// # of wave samples cap'td
    dwCurrentTimeElapsedMS As Long          '// Elapsed capture duration
    hPalCurrent As Long                     '// Current palette in use
    fCapturingNow As Long                   '// Capture in progress?
    dwReturn As Long                        '// Error value after any operation
    wNumVideoAllocated As Long              '// Actual number of video buffers
    wNumAudioAllocated As Long              '// Actual number of audio buffers
End Type

Type CAPTUREPARMS
    dwRequestMicroSecPerFrame As Long       '// Requested capture rate
    fMakeUserHitOKToCapture As Long         '// Show Hit OK to cap dlg?
    wPercentDropForError As Long            '// Give error msg if > (10%)
    fYield As Long                          '// Capture via background task?
    dwIndexSize As Long                     '// Max index size in frames (32K)
    wChunkGranularity As Long               '// Junk chunk granularity (2K)
    fUsingDOSMemory As Long                 '// Use DOS buffers?
    wNumVideoRequested As Long              '// # video buffers, If 0, autocalc
    fCaptureAudio As Long                   '// Capture audio?
    wNumAudioRequested As Long              '// # audio buffers, If 0, autocalc
    vKeyAbort As Long                       '// Virtual key causing abort
    fAbortLeftMouse As Long                 '// Abort on left mouse?
    fAbortRightMouse As Long                '// Abort on right mouse?
    fLimitEnabled As Long                   '// Use wTimeLimit?
    wTimeLimit As Long                      '// Seconds to capture
    fMCIControl As Long                     '// Use MCI video source?
    fStepMCIDevice As Long                  '// Step MCI device?
    dwMCIStartTime As Long                  '// Time to start in MS
    dwMCIStopTime As Long                   '// Time to stop in MS
    fStepCaptureAt2x As Long                '// Perform spatial averaging 2x
    wStepCaptureAverageFrames As Long       '// Temporal average n Frames
    dwAudioBufferSize As Long               '// Size of audio bufs (0 = default)
    fDisableWriteCache As Long              '// Attempt to disable write cache
End Type

Type CAPINFOCHUNK
    fccInfoID As Long                       '// Chunk ID, ICOP for copyright
    lpData As Long                          '// pointer to data
    cbData As Long                          '// size of lpData
End Type

Type VIDEOHDR
    lpData As Long '// address of video buffer
    dwBufferLength As Long '// size, in bytes, of the Data buffer
    dwBytesUsed As Long '// see below
    dwTimeCaptured As Long '// see below
    dwUser As Long '// user-specific data
    dwFlags As Long '// see below
    dwReserved(3) As Long '// reserved; do not use}
End Type

'// The two functions exported by AVICap
Declare Function capCreateCaptureWindowA Lib avicap32.dll ( _
    ByVal lpszWindowName As String, _
    ByVal dwStyle As Long, _
    ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, _
    ByVal hWndParent As Long, ByVal nID As Long) As Long
Declare Function capGetDriverDescriptionA Lib avicap32.dll ( _
    ByVal wDriver As Integer, _
    ByVal lpszName As String, _
    ByVal cbName As Long, _
    ByVal lpszVer As String, _
    ByVal cbVer As Long) As Boolean

'// ------------------------------------------------------------------
'// String IDs from status and error callbacks
'// ------------------------------------------------------------------

Public Const IDS_CAP_BEGIN = 300              '/* Capture Start */
Public Const IDS_CAP_END = 301                '/* Capture End */

Public Const IDS_CAP_INFO = 401               '/* %s */
Public Const IDS_CAP_OUTOFMEM = 402           '/* Out of memory */
Public Const IDS_CAP_FILEEXISTS = 403         '/* File '%s' exists -- overwrite it? */
Public Const IDS_CAP_ERRORPALOPEN = 404       '/* Error opening palette '%s' */
Public Const IDS_CAP_ERRORPALSAVE = 405       '/* Error saving palette '%s' */
Public Const IDS_CAP_ERRORDIBSAVE = 406       '/* Error saving frame '%s' */
Public Const IDS_CAP_DEFAVIEXT = 407          '/* avi */
Public Const IDS_CAP_DEFPALEXT = 408          '/* pal */
Public Const IDS_CAP_CANTOPEN = 409           '/* Cannot open '%s' */
Public Const IDS_CAP_SEQ_MSGSTART = 410       '/* Select OK to start capture\nof video sequence\nto %s. */
Public Const IDS_CAP_SEQ_MSGSTOP = 411        '/* Hit ESCAPE or click to end capture */
                
Public Const IDS_CAP_VIDEDITERR = 412         '/* An error occurred while trying to run VidEdit. */
Public Const IDS_CAP_READONLYFILE = 413       '/* The file '%s' is a read-only file. */
Public Const IDS_CAP_WRITEERROR = 414         '/* Unable to write to file '%s'.\nDisk may be full. */
Public Const IDS_CAP_NODISKSPACE = 415        '/* There is no space to create a capture file on the specified device. */
Public Const IDS_CAP_SETFILESIZE = 416        '/* Set File Size */
Public Const IDS_CAP_SAVEASPERCENT = 417      '/* SaveAs: %2ld%%  Hit Escape to abort. */
                
Public Const IDS_CAP_DRIVER_ERROR = 418       '/* Driver specific error message */

Public Const IDS_CAP_WAVE_OPEN_ERROR = 419    '/* Error: Cannot open the wave input device.\nCheck sample size, frequency, and channels. */
Public Const IDS_CAP_WAVE_ALLOC_ERROR = 420   '/* Error: Out of memory for wave buffers. */
Public Const IDS_CAP_WAVE_PREPARE_ERROR = 421 '/* Error: Cannot prepare wave buffers. */
Public Const IDS_CAP_WAVE_ADD_ERROR = 422     '/* Error: Cannot add wave buffers. */
Public Const IDS_CAP_WAVE_SIZE_ERROR = 423    '/* Error: Bad wave size. */
                
Public Const IDS_CAP_VIDEO_OPEN_ERROR = 424   '/* Error: Cannot open the video input device. */
Public Const IDS_CAP_VIDEO_ALLOC_ERROR = 425  '/* Error: Out of memory for video buffers. */
Public Const IDS_CAP_VIDEO_PREPARE_ERROR = 426 '/* Error: Cannot prepare video buffers. */
Public Const IDS_CAP_VIDEO_ADD_ERROR = 427    '/* Error: Cannot add video buffers. */
Public Const IDS_CAP_VIDEO_SIZE_ERROR = 428   '/* Error: Bad video size. */
                
Public Const IDS_CAP_FILE_OPEN_ERROR = 429    '/* Error: Cannot open capture file. */
Public Const IDS_CAP_FILE_WRITE_ERROR = 430   '/* Error: Cannot write to capture file.  Disk may be full. */
Public Const IDS_CAP_RECORDING_ERROR = 431    '/* Error: Cannot write to capture file.  Data rate too high or disk full. */
Public Const IDS_CAP_RECORDING_ERROR2 = 432   '/* Error while recording */
Public Const IDS_CAP_AVI_INIT_ERROR = 433     '/* Error: Unable to initialize for capture. */
Public Const IDS_CAP_NO_FRAME_CAP_ERROR = 434 '/* Warning: No frames captured.\nConfirm that vertical sync interrupts\nare configured and enabled. */
Public Const IDS_CAP_NO_PALETTE_WARN = 435    '/* Warning: Using default palette. */
Public Const IDS_CAP_MCI_CONTROL_ERROR = 436  '/* Error: Unable to access MCI device. */
Public Const IDS_CAP_MCI_CANT_STEP_ERROR = 437 '/* Error: Unable to step MCI device. */
Public Const IDS_CAP_NO_AUDIO_CAP_ERROR = 438 '/* Error: No audio data captured.\nCheck audio card settings. */
Public Const IDS_CAP_AVI_DRAWDIB_ERROR = 439  '/* Error: Unable to draw this data format. */
Public Const IDS_CAP_COMPRESSOR_ERROR = 440   '/* Error: Unable to initialize compressor. */
Public Const IDS_CAP_AUDIO_DROP_ERROR = 441   '/* Error: Audio data was lost during capture, reduce capture rate. */
                
'/* status string IDs */
Public Const IDS_CAP_STAT_LIVE_MODE = 500      '/* Live window */
Public Const IDS_CAP_STAT_OVERLAY_MODE = 501   '/* Overlay window */
Public Const IDS_CAP_STAT_CAP_INIT = 502       '/* Setting up for capture - Please wait */
Public Const IDS_CAP_STAT_CAP_FINI = 503       '/* Finished capture, now writing frame %ld */
Public Const IDS_CAP_STAT_PALETTE_BUILD = 504  '/* Building palette map */
Public Const IDS_CAP_STAT_OPTPAL_BUILD = 505   '/* Computing optimal palette */
Public Const IDS_CAP_STAT_I_FRAMES = 506       '/* %d frames */
Public Const IDS_CAP_STAT_L_FRAMES = 507       '/* %ld frames */
Public Const IDS_CAP_STAT_CAP_L_FRAMES = 508   '/* Captured %ld frames */
Public Const IDS_CAP_STAT_CAP_AUDIO = 509      '/* Capturing audio */
Public Const IDS_CAP_STAT_VIDEOCURRENT = 510   '/* Captured %ld frames (%ld dropped) %d.%03d sec. */
Public Const IDS_CAP_STAT_VIDEOAUDIO = 511     '/* Captured %d.%03d sec.  %ld frames (%ld dropped) (%d.%03d fps).  %ld audio bytes (%d,%03d sps) */
Public Const IDS_CAP_STAT_VIDEOONLY = 512      '/* Captured %d.%03d sec.  %ld frames (%ld dropped) (%d.%03d fps) */
Function capSetCallbackonError(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackonError = SendMessage(lwnd, WM_CAP_SET_CALLBACK_ERROR, 0, lpProc)
End Function
Function capSetCallbackOnStatus(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnStatus = SendMessage(lwnd, WM_CAP_SET_CALLBACK_STATUS, 0, lpProc)
End Function
Function capSetCallbackOnYield(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnYield = SendMessage(lwnd, WM_CAP_SET_CALLBACK_YIELD, 0, lpProc)
End Function
Function capSetCallbackOnFrame(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnFrame = SendMessage(lwnd, WM_CAP_SET_CALLBACK_FRAME, 0, lpProc)
End Function
Function capSetCallbackOnVideoStream(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnVideoStream = SendMessage(lwnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, lpProc)
End Function
Function capSetCallbackOnWaveStream(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnWaveStream = SendMessage(lwnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, lpProc)
End Function
Function capSetCallbackOnCapControl(ByVal lwnd As Long, ByVal lpProc As Long) As Boolean
   capSetCallbackOnCapControl = SendMessage(lwnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, lpProc)
End Function
Function capSetUserData(ByVal lwnd As Long, ByVal lUser As Long) As Boolean
   capSetUserData = SendMessage(lwnd, WM_CAP_SET_USER_DATA, 0, lUser)
End Function
Function capGetUserData(ByVal lwnd As Long) As Long
   capGetUserData = SendMessage(lwnd, WM_CAP_GET_USER_DATA, 0, 0)
End Function
Function capDriverConnect(ByVal lwnd As Long, ByVal i As Integer) As Boolean
   capDriverConnect = SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0)
End Function
Function capDriverDisconnect(ByVal lwnd As Long) As Boolean
   capDriverDisconnect = SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0)
End Function
Function capDriverGetName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean
   capDriverGetName = SendMessage(lwnd, YOURCONSTANTMESSAGE, wSize, szName)
End Function
Function capDriverGetVersion(ByVal lwnd As Long, ByVal szVer As Long, ByVal wSize As Integer) As Boolean
   capDriverGetVersion = SendMessage(lwnd, WM_CAP_DRIVER_GET_VERSION, wSize, szVer)
End Function
Function capDriverGetCaps(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capDriverGetCaps = SendMessage(lwnd, WM_CAP_DRIVER_GET_CAPS, wSize, s)
End Function
Function capFileSetCaptureFile(ByVal lwnd As Long, szName As String) As Boolean
   capFileSetCaptureFile = SendMessageS(lwnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, szName)
End Function
Function capFileGetCaptureFile(ByVal lwnd As Long, ByVal szName As Long, wSize As String) As Boolean
   capFileGetCaptureFile = SendMessageS(lwnd, WM_CAP_FILE_SET_CAPTURE_FILE, wSize, szName)
End Function
Function capFileAlloc(ByVal lwnd As Long, ByVal dwSize As Long) As Boolean
   capFileAlloc = SendMessage(lwnd, WM_CAP_FILE_ALLOCATE, 0, dwSize)
End Function
Function capFileSaveAs(ByVal lwnd As Long, szName As String) As Boolean
   capFileSaveAs = SendMessageS(lwnd, WM_CAP_FILE_SAVEAS, 0, szName)
End Function
Function capFileSetInfoChunk(ByVal lwnd As Long, ByVal lpInfoChunk As Long) As Boolean
   capFileSetInfoChunk = SendMessage(lwnd, WM_CAP_FILE_SET_INFOCHUNK, 0, lpInfoChunk)
End Function
Function capFileSaveDIB(ByVal lwnd As Long, ByVal szName As Long) As Boolean
   capFileSaveDIB = SendMessage(lwnd, WM_CAP_FILE_SAVEDIB, 0, szName)
End Function
Function capEditCopy(ByVal lwnd As Long) As Boolean
   capEditCopy = SendMessage(lwnd, WM_CAP_EDIT_COPY, 0, 0)
End Function
Function capSetAudioFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capSetAudioFormat = SendMessage(lwnd, WM_CAP_SET_AUDIOFORMAT, wSize, s)
End Function
Function capGetAudioFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Long
   capGetAudioFormat = SendMessage(lwnd, WM_CAP_GET_AUDIOFORMAT, wSize, s)
End Function
Function capGetAudioFormatSize(ByVal lwnd As Long) As Long
   capGetAudioFormatSize = SendMessage(lwnd, WM_CAP_GET_AUDIOFORMAT, 0, 0)
End Function
Function capDlgVideoFormat(ByVal lwnd As Long) As Boolean
   capDlgVideoFormat = SendMessage(lwnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0)
End Function
Function capDlgVideoSource(ByVal lwnd As Long) As Boolean
   capDlgVideoSource = SendMessage(lwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0)
End Function
Function capDlgVideoDisplay(ByVal lwnd As Long) As Boolean
   capDlgVideoDisplay = SendMessage(lwnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0)
End Function
Function capDlgVideoCompression(ByVal lwnd As Long) As Boolean
   capDlgVideoCompression = SendMessage(lwnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
End Function
Function capGetVideoFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Long
   capGetVideoFormat = SendMessage(lwnd, WM_CAP_GET_VIDEOFORMAT, wSize, s)
End Function
Function capGetVideoFormatSize(ByVal lwnd As Long) As Long
   capGetVideoFormatSize = SendMessage(lwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0)
End Function
Function capSetVideoFormat(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capSetVideoFormat = SendMessage(lwnd, WM_CAP_SET_VIDEOFORMAT, wSize, s)
End Function
Function capPreview(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
   capPreview = SendMessage(lwnd, WM_CAP_SET_PREVIEW, f, 0)
End Function
Function capPreviewRate(ByVal lwnd As Long, ByVal wMS As Integer) As Boolean
   capPreviewRate = SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE, wMS, 0)
End Function
Function capOverlay(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
   capOverlay = SendMessage(lwnd, WM_CAP_SET_OVERLAY, f, 0)
End Function
Function capPreviewScale(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
   capPreviewScale = SendMessage(lwnd, WM_CAP_SET_SCALE, f, 0)
End Function
Function capGetStatus(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capGetStatus = SendMessage(lwnd, WM_CAP_GET_STATUS, wSize, s)
End Function
Function capSetScrollPos(ByVal lwnd As Long, ByVal lpP As Long) As Boolean
   capSetScrollPos = SendMessage(lwnd, WM_CAP_SET_SCROLL, 0, lpP)
End Function
Function capGrabFrame(ByVal lwnd As Long) As Boolean
   capGrabFrame = SendMessage(lwnd, WM_CAP_GRAB_FRAME, 0, 0)
End Function
Function capGrabFrameNoStop(ByVal lwnd As Long) As Boolean
   capGrabFrameNoStop = SendMessage(lwnd, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0)
End Function
Function capCaptureSequence(ByVal lwnd As Long) As Boolean
   capCaptureSequence = SendMessage(lwnd, WM_CAP_SEQUENCE, 0, 0)
End Function
Function capCaptureSequenceNoFile(ByVal lwnd As Long) As Boolean
   capCaptureSequenceNoFile = SendMessage(lwnd, WM_CAP_SEQUENCE_NOFILE, 0, 0)
End Function
Function capCaptureStop(ByVal lwnd As Long) As Boolean
   capCaptureStop = SendMessage(lwnd, WM_CAP_STOP, 0, 0)
End Function
Function capCaptureAbort(ByVal lwnd As Long) As Boolean
   capCaptureAbort = SendMessage(lwnd, WM_CAP_ABORT, 0, 0)
End Function
Function capCaptureSingleFrameOpen(ByVal lwnd As Long) As Boolean
   capCaptureSingleFrameOpen = SendMessage(lwnd, WM_CAP_SINGLE_FRAME_OPEN, 0, 0)
End Function
Function capCaptureSingleFrameClose(ByVal lwnd As Long) As Boolean
   capCaptureSingleFrameClose = SendMessage(lwnd, WM_CAP_SINGLE_FRAME_CLOSE, 0, 0)
End Function
Function capCaptureSingleFrame(ByVal lwnd As Long) As Boolean
   capCaptureSingleFrame = SendMessage(lwnd, WM_CAP_SINGLE_FRAME, 0, 0)
End Function
Function capCaptureGetSetup(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capCaptureGetSetup = SendMessage(lwnd, WM_CAP_GET_SEQUENCE_SETUP, wSize, s)
End Function
Function capCaptureSetSetup(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
   capCaptureSetSetup = SendMessage(lwnd, WM_CAP_SET_SEQUENCE_SETUP, wSize, s)
End Function
Function capSetMCIDeviceName(ByVal lwnd As Long, ByVal szName As Long) As Boolean
   capSetMCIDeviceName = SendMessage(lwnd, WM_CAP_SET_MCI_DEVICE, 0, szName)
End Function
Function capGetMCIDeviceName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean
   capGetMCIDeviceName = SendMessage(lwnd, WM_CAP_GET_MCI_DEVICE, wSize, szName)
End Function
Function capPaletteOpen(ByVal lwnd As Long, ByVal szName As Long) As Boolean
   capPaletteOpen = SendMessage(lwnd, WM_CAP_PAL_OPEN, 0, szName)
End Function
Function capPaletteSave(ByVal lwnd As Long, ByVal szName As Long) As Boolean
   capPaletteSave = SendMessage(lwnd, WM_CAP_PAL_SAVE, 0, szName)
End Function
Function capPalettePaste(ByVal lwnd As Long) As Boolean
   capPalettePaste = SendMessage(lwnd, WM_CAP_PAL_PASTE, 0, 0)
End Function
Function capPaletteAuto(ByVal lwnd As Long, ByVal iFrames As Integer, ByVal iColor As Long) As Boolean
   capPaletteAuto = SendMessage(lwnd, WM_CAP_PAL_AUTOCREATE, iFrames, iColors)
End Function
Function capPaletteManual(ByVal lwnd As Long, ByVal fGrab As Boolean, ByVal iColors As Long) As Boolean
   capPaletteManual = SendMessage(lwnd, WM_CAP_PAL_MANUALCREATE, fGrab, iColors)
End Function

选择窗口

Option Explicit

Private Sub Command1_Click()

End Sub


Private Sub cmdCancel_Click()
 
    Unload Me
 
End Sub

Private Sub cmdSelect_Click()
   
    Dim sTitle As String
    Dim Caps As CAPDRIVERCAPS
    
    If cmboSource.ListIndex <> -1 Then
        
        '// Connect the capture window to the driver
        If capDriverConnect(lwndC, cmboSource.ListIndex) Then
    
            '// Get the capabilities of the capture driver
            capDriverGetCaps lwndC, VarPtr(Caps), Len(Caps)
            
            '// If the capture driver does not support a dialog, grey it out
            '// in the menu bar.
            frmMain.mnuSource.Enabled = Caps.fHasDlgVideoSource
            frmMain.mnuFormat.Enabled = Caps.fHasDlgVideoFormat
            frmMain.mnuDisplay.Enabled = Caps.fHasDlgVideoDisplay
        
            sTitle = cmboSource.Text
            
            SetWindowText lwndC, sTitle
            ResizeCaptureWindow lwndC
        End If
    
    End If
    
    
    Unload Me
   
End Sub


Private Sub Form_Load()
    
    Dim lpszName As String * 100
    Dim lpszVer As String * 100
    Dim x As Integer
    Dim lResult As Long
    Dim Caps As CAPDRIVERCAPS
    
    '// Get a list of all the installed drivers
    x = 0
    Do
        lResult = capGetDriverDescriptionA(x, lpszName, 100, lpszVer, 100)   '// Retrieves driver info
        If lResult Then
            cmboSource.AddItem lpszName
            x = x + 1
        End If
    Loop Until lResult = False

    '// Get the capabilities of the current capture driver
    lResult = capDriverGetCaps(lwndC, VarPtr(Caps), Len(Caps))
    
    '// Select the driver that is currently being used
    If lResult Then cmboSource.ListIndex = Caps.wDeviceIndex

End Sub

主窗口

Option Explicit

Private Sub Form_Load()
    
    Dim lpszName As String * 100
    Dim lpszVer As String * 100
    Dim Caps As CAPDRIVERCAPS
        
    '//Create Capture Window
    capGetDriverDescriptionA 0, lpszName, 100, lpszVer, 100  '// Retrieves driver info
    lwndC = capCreateCaptureWindowA(lpszName, WS_CAPTION Or WS_THICKFRAME Or WS_VISIBLE Or WS_CHILD, 0, 0, 160, 120, Me.hWnd, 0)

    '// Set title of window to name of driver
    SetWindowText lwndC, lpszName
    
    '// Set the video stream callback function
    capSetCallbackOnStatus lwndC, AddressOf MyStatusCallback
    capSetCallbackonError lwndC, AddressOf MyErrorCallback
    
    '// Connect the capture window to the driver
    If capDriverConnect(lwndC, 0) Then
        '/////
        '// Only do the following if the connect was successful.
        '// if it fails, the error will be reported in the call
        '// back function.
        '/////
        '// Get the capabilities of the capture driver
        capDriverGetCaps lwndC, VarPtr(Caps), Len(Caps)
        
        '// If the capture driver does not support a dialog, grey it out
        '// in the menu bar.
        If Caps.fHasDlgVideoSource = 0 Then mnuSource.Enabled = False
        If Caps.fHasDlgVideoFormat = 0 Then mnuFormat.Enabled = False
        If Caps.fHasDlgVideoDisplay = 0 Then mnuDisplay.Enabled = False
        
        '// Turn Scale on
        capPreviewScale lwndC, True
            
        '// Set the preview rate in milliseconds
        capPreviewRate lwndC, 66
        
        '// Start previewing the image from the camera
        capPreview lwndC, True
            
        '// Resize the capture window to show the whole image
        ResizeCaptureWindow lwndC

    End If


End Sub

Private Sub Form_Unload(Cancel As Integer)

    '// Disable all callbacks
    capSetCallbackonError lwndC, vbNull
    capSetCallbackOnStatus lwndC, vbNull
    capSetCallbackOnYield lwndC, vbNull
    capSetCallbackOnFrame lwndC, vbNull
    capSetCallbackOnVideoStream lwndC, vbNull
    capSetCallbackOnWaveStream lwndC, vbNull
    capSetCallbackOnCapControl lwndC, vbNull
    

End Sub

Private Sub mnuAllocate_Click()

 Dim sFile As String * 250
 Dim lSize As Long
 
 '// Setup swap file for capture
 lSize = 1000000
 sFile = C:\TEMP.AVI
 capFileSetCaptureFile lwndC, sFile
 capFileAlloc lwndC, lSize
 
End Sub

Private Sub mnuAlwaysVisible_Click()
    
    mnuAlwaysVisible.Checked = Not (mnuAlwaysVisible.Checked)
    
    If mnuAlwaysVisible.Checked Then
        SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
    Else
        SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
    End If


End Sub

Private Sub mnuCompression_Click()
'   /*
'   * Display the Compression dialog when Compression is selected from
'   * the menu bar.
'   */
    
    capDlgVideoCompression lwndC

End Sub

Private Sub mnuCopy_Click()

    capEditCopy lwndC
        
End Sub

Private Sub mnuDisplay_Click()
'   /*
'   * Display the Video Display dialog when Display is selected from
'   * the menu bar.
'   */

    capDlgVideoDisplay lwndC
    
End Sub

Private Sub mnuExit_Click()

    Unload Me
    
End Sub

Private Sub mnuFormat_Click()
'  /*
'   * Display the Video Format dialog when Format is selected from the
'   * menu bar.
'   */

    capDlgVideoFormat lwndC
    ResizeCaptureWindow lwndC

End Sub

Private Sub mnuPreview_Click()

    frmMain.StatusBar.SimpleText = vbNullString
    mnuPreview.Checked = Not (mnuPreview.Checked)
    capPreview lwndC, mnuPreview.Checked
    
End Sub

Private Sub mnuScale_Click()
    
    mnuScale.Checked = Not (mnuScale.Checked)
    capPreviewScale lwndC, mnuScale.Checked
    
    If mnuScale.Checked Then
       SetWindowLong lwndC, GWL_STYLE, WS_THICKFRAME Or WS_CAPTION Or WS_VISIBLE Or WS_CHILD
    Else
       SetWindowLong lwndC, GWL_STYLE, WS_BORDER Or WS_CAPTION Or WS_VISIBLE Or WS_CHILD
    End If

    ResizeCaptureWindow lwndC
    
End Sub

Private Sub mnuSelect_Click()
    
    frmSelect.Show vbModal, Me

End Sub

Private Sub mnuSource_Click()
'   /*
'    * Display the Video Source dialog when Source is selected from the
'    * menu bar.
'    */
    
    capDlgVideoSource lwndC

End Sub

Private Sub mnuStart_Click()
' /*
'  * If Start is selected from the menu, start Streaming capture.
'  * The streaming capture is terminated when the Escape key is pressed
'  */
    
    Dim sFileName As String
    Dim CAP_PARAMS As CAPTUREPARMS
    
    capCaptureGetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
    
    CAP_PARAMS.dwRequestMicroSecPerFrame = (1 * (10 ^ 6)) / 30  ' 30 Frames per second
    CAP_PARAMS.fMakeUserHitOKToCapture = True
    CAP_PARAMS.fCaptureAudio = False
    
    capCaptureSetSetup lwndC, VarPtr(CAP_PARAMS), Len(CAP_PARAMS)
    
    sFileName = C:\myvideo.avi
    
    capCaptureSequence lwndC  ' Start Capturing!
    capFileSaveAs lwndC, sFileName  ' Copy video from swap file into a real file.

End Sub


Private Sub StatusBar1_PanelClick(ByVal Panel As ComctlLib.Panel)

End Sub
 



    

 

本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利