[VB6][WebCam] Alterar o dispositivo de captura programaticamente.

Kayvlim

Moderating from /home
Staff
(espero ter feito bem o título...)

Hello, pessoal! Tudo bem?

A minha dúvida de hoje:

Tenho uma webcam (emprestada). ÉÉÉÉÉÉÉÉÉÉÉÉÉÉ :-D :P agora, quero fazer um programa que tira fotos ao utilizador:
mainkd2.png

(IMAGEM 1)

À esquerda está a foto que a webcam tirou (a boneca de porcelana da minha mãe -.- ) e à direita está a lista de dispositivos. Só há um ^^'

Agora, o problema:
Ao ligar o driver, ele pede automaticamente para eu escolher um dispositivo de vídeo:
capturefromxw1.png

(IMAGEM 2)
Esta combo tem 3 opções. Eu não queria que esta janela aparecesse cada vez que o utilizador activasse o driver.

Código do programa (está comentado em inglês porque eu fiz primeiro esta pergunta num fórum inglês de Visual Basic):

'Create Capture window:
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 96, 96, Me.hwnd, 0)

'Connect to webcam:

DoEvents: SendMessage mCapHwnd, CONNECT, 0, 0

'DISConnect webcam:

DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0

'Get Current Frame
SendMessage mCapHwnd, GET_FRAME, 0, 0
'Copy Current Frame to ClipBoard
SendMessage mCapHwnd, COPY, 0, 0
'Put ClipBoard's Data to picOutput
picOutput.Picture = Clipboard.GetData
'Clear ClipBoard
Clipboard.Clear

Se precisarem, eu traduzo.
O CONNECT 0,0 conecta o driver 0. O outro 0 não sei o que quer dizer; e penso que pode ser isso que eu preciso. Ou, ao espiar (Spy++) as mensagens do MSN, encontrei uma que é a WM_DEVICECHANGE (passa os valores 7,0). No entanto, ao fazer Post dessa mensagem com esses parâmetros para mCapHwnd não resultou.

Voltando à questão, eu queria que o utilizador pudesse, na primeira execução, escolher o tal dispositivo de captura, mas a partir daí ele gravava a escolha, e não voltava a pedir.

Para não restarem dúvidas, digo já que o MSN Messenger faz isso:
msnmessengerrl7.png

(IMAGEM 3)
Ou seja, a tal janela que me aparece, está quase "incluida" na janela do messenger; e no MSN eu escolhi uma vez o dispositivo e ele nunca mais mo pediu. É isso que eu quero :)

Em suma, quero que a janela em IMAGEM 2 só apareça uma vez; ou se possível, quero fazer com que o meu programa consiga ter uma janela semelhante à IMAGEM 3.

Penso que não fui suficientemente explícito. Se precisarem de explicações, perguntem que eu tento-vos responder ;)

Obrigado pelo vosso tempo :)

Cumprimentos [[[[[[[[[]]]]]]]]]
angelofwisdom
 
driver.

Yellow :)

usa o WM_CAP_DRIVER_CONNECT

Código:
Public Const WM_USER As Short = &H400S
Public Const WM_CAP_DRIVER_CONNECT As Integer = WM_USER + 10
Public Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_USER + 11

Function capDriverConnect(ByVal lwnd As Integer, ByVal i As Short) As Boolean 
  capDriverConnect = SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0) 
End Function  

Function capDriverDisconnect(ByVal lwnd As Integer) As Boolean 
  capDriverDisconnect = SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0) 
End Function 

....

capDriverConnect mCapHwnd, IndiceDoDriver        ' tenta o valor 0 ... se não der tenta o 1

...
...

capDriverDisconnect mCapHwnd


Nota: Conselho! deixa o vb6 ... :)

/ing
 
Mas que desenterranço! Vens buscar um tópico que tem quase um ano para perguntar o que dá para fazer com isto?


O que eu tinha na altura (para além de uma webcam que já não tenho :x ) era um programa que conseguia usar a webcam.
O meu problema era que não conseguia fazer com que o programa soubesse decidir qual dos dispositivos usar automaticamente. Portanto, em vez de aparecer aquela janela standard, aparecia uma do programa, e a escolha do utilizador seria gravada.

Nunca soube corrigir isso, e como fiquei sem a webcam dias depois da resposta do inginheiiro, ainda não tive a oportunidade de testar o que ele disse :\
 
Back
Topo