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

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

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

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

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

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

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

    תגובה 1 תגובה אחרונה
    0
    • 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
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום