ich habe nun seit einiger Zeit PureBasic, bin inzwischen auch begeisterter Anhänger. Bisher konnte ich mich mit Fragen zurückhalten, die Foren haben ja eine sehr hohe Abdeckung des "HowTo" in fast allen Bereichen.
Aber nun zu einer Frage, die ich trotz intensiverer Recherchen nicht beantwortet bekommen habe:
Ich habe das "klassische" Problem "Anzeige einer Webcam" / Speichern eines Bildes umgesetzt und das funktioniert auch.
Wenn aber die Webcam in Benutzung ist, möchte ich dem "Anwender" eine Fehlermeldung in der Art geben "Webcam wird zur Zeit von einem anderen Programm benutzt"
Und genau das festzustellen will mir nicht gelingen... Übersehe ich da etwas simples ? Muss man vielleicht sogar das Gerät physisch selber ansprechen, um die Info zu bekommen ?
Für Eure Mühe im Voraus vielen Dank!
Code: Alles auswählen
UseJPEGImageEncoder()
UseJPEGImageDecoder()
#WM_CAP_START = #WM_USER
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_STOP = #WM_CAP_START + 68
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_GRAP_FRAME = #WM_CAP_START + 60
Global sn.l
Global hWndC.l
hwnd.l=OpenWindow(#Window_0, 0, 0, 0, 0, "camshot", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
HideWindow(0, 1)
If OpenLibrary(0, "avicap32.dll")
*capAddress = GetFunction(0, "capCreateCaptureWindowA")
hWndC.l = CallFunctionFast(*capAddress, "cw", #WS_CHILD | #WS_VISIBLE, 50,38, 310, 230, WindowID(0),0)
SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 1, 0)
SendMessage_(hWndC, #WM_CAP_SET_SCALE, #True, 0)
; hier liegt das problem
; der kriegt nämlich immer ein bild, auch wenn die cam in benutzung ist
; eine abfrage a la sendmessage_(hwndc, #wm_is_cam_active) gibts nicht ...
;
SendMessage_(hWndC.l, #WM_CAP_GRAP_FRAME, 1, 0)
SendMessage_(hWndC.l, #WM_CAP_EDIT_COPY, 0, 0)
sn.l = GetClipboardImage(#PB_Any)
If sn.l
saver$="x.jpg"
SaveImage(sn.l,saver$,#PB_ImagePlugin_JPEG,10)
FreeImage(sn.l)
EndIf
ClearClipboard()
EndIf
SendMessage_(hWndC, #WM_CAP_STOP, 0, 0)
SendMessage_(hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
DestroyWindow_(hWndC)
CloseLibrary(0)
End