MinhajAli Ответов: 2

Невозможно захватить изображение в Windows 7 с помощью Vb.net


Привет.
Я пытался кодировать с помощью Avicap.dll, и он прекрасно работает в windos Xp
Но когда я попробовал свои коды под Win 7 OS, он не смог захватить.
есть ли какой-нибудь способ, пожалуйста, помогите.

заранее спасибо

У меня есть использование кода ниже.
это не мой код, на самом деле я взял его из google.
  Const WM_CAP As Short = &H400S
    Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
    Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
    Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
    Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
    Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
    Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
    Const WS_CHILD As Integer = &H40000000
    Const WS_VISIBLE As Integer = &H10000000
    Const SWP_NOMOVE As Short = &H2S
    Const SWP_NOSIZE As Short = 1
    Const SWP_NOZORDER As Short = &H4S
    Const HWND_BOTTOM As Short = 1
    Dim iDevice As Integer = 0 ' Current device ID
    Dim hHwnd As Integer ' Handle to preview window 


 Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
        (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _
        <marshalas(unmanagedtype.asany)> ByVal lParam As Object) As Integer

    Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, _
        ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _
        ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer

    Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean

    Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _
        (ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
        ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
        ByVal nHeight As Short, ByVal hWndParent As Integer, _
        ByVal nID As Integer) As Integer

    Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _
        ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
        ByVal cbVer As Integer) As Boolean


Private Sub OpenForm()
       Try

           Dim iHeight As Integer = PictureBox1.Height
           Dim iWidth As Integer = PictureBox1.Width

           ' ' Open Preview window in picturebox
           '
           hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, _
               480, PictureBox1.Handle.ToInt32, 0)

           '
           ' Connect to device
           '
           If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
               '
               'Set the preview scale
               '
               SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)

               '
               'Set the preview rate in milliseconds
               '
               SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)

               '
               'Start previewing the image from the camera
               '
               SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)

               '
               ' Resize window to fit in picturebox
               '
               SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, PictureBox1.Width, PictureBox1.Height, _
                       SWP_NOMOVE Or SWP_NOZORDER)
               End If
       Catch ex As Exception

       End Try
   End Sub

Private Sub btnTakeImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTakeImage.Click
               OpenForm()
End Sub

2 Ответов

Рейтинг:
1

Zaf Khan

Мэйб эта статья может быть вам полезна переполнение стека


Рейтинг:
1

gayansudara

вам лучше использовать DriverX файл.
Таков путь.


Graeme_Grant

Есть ли причина, по которой вы отвечаете на вопрос 6-летней давности в лучшем случае расплывчатым ответом?