דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. צילום תמונה לאקסס

צילום תמונה לאקסס

מתוזמן נעוץ נעול הועבר תכנות
19 פוסטים 4 כותבים 547 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    השיב לdovid ב נערך לאחרונה על ידי OdedDvir
    #6

    @ארי למעשה זה אפשרי באקסס, על ידי קריאות ל-API של Windows. אכן הקודים המפוזרים ברחבי העולם סובלים מהזנחה.

    הנה מחלקה שיצרתי לטיפול במצלמת רשת. צור Class Module ותדביק את הקוד הבא:

    'UX_WebCam : A WebCam API Class. By OdedDvir
    
    Option Compare Database
    Option Explicit
    
    Const WS_CHILD As Long = &H40000000
    Const WS_VISIBLE As Long = &H10000000
    
    Const WM_USER As Long = &H400
    Const WM_CAP_START As Long = WM_USER
    
    Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP_START + 10
    Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP_START + 11
    Const WM_CAP_EDIT_COPY As Long = WM_CAP_START + 30
    Const WM_CAP_SET_PREVIEW As Long = WM_CAP_START + 50
    Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP_START + 52
    Const WM_CAP_DLG_VIDEOFORMAT As Long = WM_CAP_START + 41
    Const WM_CAP_FILE_SAVEDIB As Long = WM_CAP_START + 25
    Const WM_CAP_GRAB_FRAME As Long = WM_CAP_START + 60
    
    Private Declare PtrSafe Function apiCapCreateCaptureWindow 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 LongPtr, _
                                     ByVal nID As Long) As Long
    
    Private Declare PtrSafe Function apiSendMessage Lib "user32" Alias "SendMessageA" _
                                    (ByVal hWnd As LongPtr, ByVal wMsg As Long, _
                                     ByVal wParam As Long, ByRef lParam As Any) As Long
    
    Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long
    
    Private hCap As LongPtr
    
    Public Sub OpenWebCam(targethWnd As Long, Optional width = 640, Optional height = 480)
        hCap = apiCapCreateCaptureWindow("Capture Window", WS_CHILD Or WS_VISIBLE, 0, 0, width, height, targethWnd, 0)
        If hCap = 0 Then Exit Sub
        apiSendMessage hCap, WM_CAP_DRIVER_CONNECT, 0, 0
        apiSendMessage hCap, WM_CAP_SET_PREVIEWRATE, 66, 0&
        apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
    End Sub
    
    Public Sub TakeSnapshotToFile(fileName As String)
        apiSendMessage hCap, WM_CAP_GRAB_FRAME, 0, 0
        apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&
        apiSendMessage hCap, WM_CAP_FILE_SAVEDIB, 0&, ByVal CStr(fileName)
        apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
    End Sub
    
    Public Sub OpenVideoFormatDialog()
        apiSendMessage hCap, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&
    End Sub
    
    Public Sub CaptureToClipboard()
        apiSendMessage hCap, WM_CAP_GRAB_FRAME, 0, 0
        apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&
        apiSendMessage hCap, WM_CAP_EDIT_COPY, 0, 0
        apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
    End Sub
    
    Public Sub CloseWebCam()
        apiSendMessage hCap, WM_CAP_DRIVER_DISCONNECT, 0&, 0&
    End Sub
    

    דוגמא ליישום:

    א. צור טופס עם 6 לחצנים בשמות התואמים למופיע בקוד הבא, דהיינו:
    cmdCloseWebCam, cmdOpenSettings cmdOpenWebCam וכו', ועם פקד תמונה אחד בשם SavedPicture.
    ב. במודול של הטופס תדביק את הקוד הבא:

    Option Compare Database
    Option Explicit
    
    Private WebCam As New UX_WebCam
    Private snapshotCount As Integer
    
    Private Function GenerateFileName() As String
        GenerateFileName = "d:\Temp\Picture" & snapshotCount & ".bmp"
    End Function
    
    Private Sub cmdOpenWebCam_Click()
        snapshotCount = 0
        WebCam.OpenWebCam Me.hWnd, 640, 480
    End Sub
    
    Private Sub cmdOpenSettings_Click()
        WebCam.OpenVideoFormatDialog
    End Sub
    
    Private Sub cmdCloseWebCam_Click()
        WebCam.CloseWebCam
    End Sub
    
    Private Sub cmdCopySnapshot_Click()
        WebCam.CaptureToClipboard
        MsgBox "An image was copied to the clipboard!"
    End Sub
    
    Private Sub cmdLoadPictureToControl_Click()
        Me.SavedPicture.Picture = GenerateFileName
    End Sub
    
    Private Sub cmdSaveSnapshotToFile_Click()
        snapshotCount = snapshotCount + 1
        
        Dim fileName As String
        fileName = GenerateFileName
        
        WebCam.TakeSnapshotToFile fileName
        MsgBox "File " & fileName & " was created!"
    End Sub
    
    Private Sub Form_Close()
        WebCam.CloseWebCam
    End Sub
    
    א תגובה 1 תגובה אחרונה
    4
    • א מנותק
      א מנותק
      ארי
      השיב לOdedDvir ב נערך לאחרונה על ידי
      #7

      @OdedDvir תודה!
      הוא מציג לי רק מסך שחור...
      אמנם לא עושה שום דיבאג אבל גם לא מראה לי את המצלמה.
      ברגע שאני לוחץ על פתח מצלמה כל הטופס נהיה שחור.

      OdedDvirO איש ימיניא 2 תגובות תגובה אחרונה
      0
      • OdedDvirO מנותק
        OdedDvirO מנותק
        OdedDvir
        השיב לארי ב נערך לאחרונה על ידי OdedDvir
        #8

        @ארי תבדוק בהגדרות הפרטיות של המצלמה ב-Windows. כנראה חסמת גישה של אפליקציות למצלמה.

        א תגובה 1 תגובה אחרונה
        0
        • א מנותק
          א מנותק
          ארי
          השיב לOdedDvir ב נערך לאחרונה על ידי
          #9

          @OdedDvir כל ההגדרות מופעלות.

          תגובה 1 תגובה אחרונה
          0
          • איש ימיניא מנותק
            איש ימיניא מנותק
            איש ימיני
            השיב לארי ב נערך לאחרונה על ידי
            #10

            @ארי
            נראה שזה בעיה אצלך.
            גם הקובץ דוגמה שלך עובד אצלי.
            זה מדליק את המצלמה ומראה את זה באקסס.

            א תגובה 1 תגובה אחרונה
            0
            • א מנותק
              א מנותק
              ארי
              השיב לאיש ימיני ב נערך לאחרונה על ידי
              #11

              @איש-ימיני איזה אופיס יש לך? וכמה סיביות?
              אולי זה קשור 🤔

              איש ימיניא תגובה 1 תגובה אחרונה
              0
              • איש ימיניא מנותק
                איש ימיניא מנותק
                איש ימיני
                השיב לארי ב נערך לאחרונה על ידי
                #12

                @ארי אופיס 2019 64 סיביות.

                א תגובה 1 תגובה אחרונה
                0
                • א מנותק
                  א מנותק
                  ארי
                  השיב לאיש ימיני ב נערך לאחרונה על ידי
                  #13

                  @איש-ימיני לי יש 2021 32 סיביות.
                  אולי זה קשור לסיביות?
                  אבל לכאורה אם כן הוא היה אמור לעשות באג איפשהו, לא?

                  איש ימיניא תגובה 1 תגובה אחרונה
                  0
                  • איש ימיניא מנותק
                    איש ימיניא מנותק
                    איש ימיני
                    השיב לארי ב נערך לאחרונה על ידי איש ימיני
                    #14

                    @ארי
                    יש שינויים בין 64 ל 32.
                    נסה עם קובץ זה:-צילום-תמונה-לאקסס.accdb
                    אמור לעבוד גם על 64 וגם על 32
                    אני מקווה שאין עוד שינויים שצריך לעשות
                    זה מה שעשיתי:

                    #If Win64 And VBA7 Then
                    
                    Private Declare PtrSafe 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 LongPtr _
                            , ByVal nID As Long) As Long
                    
                    Private Declare PtrSafe Function SendMessage Lib "user32" _
                        Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long _
                            , ByVal wParam As Long, ByRef lParam As Any) As Long
                            
                    Dim hCap As LongPtr
                    
                    #Else
                    
                    Private 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 Long
                    
                    Private Declare Function SendMessage Lib "user32" _
                        Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long _
                            , ByVal wParam As Long, ByRef lParam As Any) As Long
                            
                    Dim hCap As Long
                    
                    #End If
                    
                    א תגובה 1 תגובה אחרונה
                    0
                    • א מנותק
                      א מנותק
                      ארי
                      השיב לאיש ימיני ב נערך לאחרונה על ידי
                      #15

                      @איש-ימיני לא עובד 😕
                      ככה זה נראה:
                      c29132d3-4d7e-44f0-a54c-cb27d272178e-image.png
                      בדקתי גם על מחשב עם אופיס 2016 32 סיביות ואותה תוצאה.

                      אתה משתמש במצלמת רשת או במצלמה המובנית של המחשב?
                      אני מנסה לחפש הבדלים....
                      תודה.

                      איש ימיניא OdedDvirO 2 תגובות תגובה אחרונה
                      0
                      • איש ימיניא מנותק
                        איש ימיניא מנותק
                        איש ימיני
                        השיב לארי ב נערך לאחרונה על ידי
                        #16

                        @ארי
                        אני משתמש במצלמה מובנית.
                        תנסה לשנות את הקוד של @OdedDvir
                        להלן השינויים בחלק הראשון של הקוד:

                        'UX_WebCam : A WebCam API Class. By OdedDvir
                        
                        Option Compare Database
                        Option Explicit
                        
                        Const WS_CHILD As Long = &H40000000
                        Const WS_VISIBLE As Long = &H10000000
                        
                        Const WM_USER As Long = &H400
                        Const WM_CAP_START As Long = WM_USER
                        
                        Const WM_CAP_DRIVER_CONNECT As Long = WM_CAP_START + 10
                        Const WM_CAP_DRIVER_DISCONNECT As Long = WM_CAP_START + 11
                        Const WM_CAP_EDIT_COPY As Long = WM_CAP_START + 30
                        Const WM_CAP_SET_PREVIEW As Long = WM_CAP_START + 50
                        Const WM_CAP_SET_PREVIEWRATE As Long = WM_CAP_START + 52
                        Const WM_CAP_DLG_VIDEOFORMAT As Long = WM_CAP_START + 41
                        Const WM_CAP_FILE_SAVEDIB As Long = WM_CAP_START + 25
                        Const WM_CAP_GRAB_FRAME As Long = WM_CAP_START + 60
                        
                        Private Declare Function apiCapCreateCaptureWindow 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 Long
                        
                        Private Declare Function apiSendMessage Lib "user32" Alias "SendMessageA" _
                                                        (ByVal hWnd As Long, ByVal wMsg As Long, _
                                                         ByVal wParam As Long, ByRef lParam As Any) As Long
                        
                        Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long
                        
                        Private hCap As Long
                        
                        Public Sub OpenWebCam(targethWnd As Long, Optional width = 640, Optional height = 480)
                            hCap = apiCapCreateCaptureWindow("Capture Window", WS_CHILD Or WS_VISIBLE, 0, 0, width, height, targethWnd, 0)
                            If hCap = 0 Then Exit Sub
                            apiSendMessage hCap, WM_CAP_DRIVER_CONNECT, 0, 0
                            apiSendMessage hCap, WM_CAP_SET_PREVIEWRATE, 66, 0&
                            apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
                        End Sub
                        
                        Public Sub TakeSnapshotToFile(fileName As String)
                            apiSendMessage hCap, WM_CAP_GRAB_FRAME, 0, 0
                            apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&
                            apiSendMessage hCap, WM_CAP_FILE_SAVEDIB, 0&, ByVal CStr(fileName)
                            apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
                        End Sub
                        
                        Public Sub OpenVideoFormatDialog()
                            apiSendMessage hCap, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&
                        End Sub
                        
                        Public Sub CaptureToClipboard()
                            apiSendMessage hCap, WM_CAP_GRAB_FRAME, 0, 0
                            apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(False), 0&
                            apiSendMessage hCap, WM_CAP_EDIT_COPY, 0, 0
                            apiSendMessage hCap, WM_CAP_SET_PREVIEW, CLng(True), 0&
                        End Sub
                        
                        Public Sub CloseWebCam()
                            apiSendMessage hCap, WM_CAP_DRIVER_DISCONNECT, 0&, 0&
                        End Sub
                        

                        אני מקווה שזה כל השינויים.
                        אם עדיין לא עובד נצטרך להמתין ל @OdedDvir עצמו.

                        תגובה 1 תגובה אחרונה
                        0
                        • OdedDvirO מנותק
                          OdedDvirO מנותק
                          OdedDvir
                          השיב לארי ב נערך לאחרונה על ידי OdedDvir
                          #17

                          @איש-ימיני החל מאקסס 2013 אין צורך לשנות את הקוד כדי להתאים אחורה ל-32 ביט. הקוד של 64 ביט עובר ללא שגיאות.
                          @ארי תבדוק אם הדריבר בכלל מופעל.
                          בקוד שצירפתי, תשנה את השורה

                          apiSendMessage hCap, WM_CAP_DRIVER_CONNECT, 0, 0
                          

                          לשורה הבאה:

                          Debug.Print CBool(apiSendMessage(hCap, WM_CAP_DRIVER_CONNECT, 0, 0))
                          

                          ותראה מה מודפס בקונסול (Immediate window). צריך להיות True.

                          א 2 תגובות תגובה אחרונה
                          2
                          • א מנותק
                            א מנותק
                            ארי
                            השיב לOdedDvir ב נערך לאחרונה על ידי
                            #18

                            @OdedDvir אמר בצילום תמונה לאקסס:

                            צריך להיות True

                            הוא אכן מדפיס True.

                            תגובה 1 תגובה אחרונה
                            0
                            • א מנותק
                              א מנותק
                              ארי
                              השיב לOdedDvir ב נערך לאחרונה על ידי ארי
                              #19

                              @OdedDvir אמר בצילום תמונה לאקסס:

                              תבדוק אם הדריבר בכלל מופעל

                              זה?
                              f9091eb2-5c0d-49cb-b5c8-844549c10d32-image.png

                              תגובה 1 תגובה אחרונה
                              0

                              בא תתחבר לדף היומי!
                              • התחברות

                              • אין לך חשבון עדיין? הרשמה

                              • התחברו או הירשמו כדי לחפש.
                              • פוסט ראשון
                                פוסט אחרון
                              0
                              • דף הבית
                              • קטגוריות
                              • פוסטים אחרונים
                              • משתמשים
                              • חיפוש
                              • חוקי הפורום