elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Evitar Cuadro de dialogo "Origen de video"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Evitar Cuadro de dialogo "Origen de video"  (Leído 5,087 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Evitar Cuadro de dialogo "Origen de video"
« en: 7 Abril 2014, 22:58 pm »

Hola! Estoy con un programa que captura una imagen de la webcam, es aplicación de consola, sobre Win7, uso las funciones capCreateCaptureWindow, capDriverConnect, capDriverDisconnect y SendMessage, la imagen se captura, pero 2*3 me pide que seleccione la cámara de una lista (en la que solo existe una cámara, porque es la única que tengo), si bien ya he buscado por otros lados y di con gente que tiene el mismo problema quisiera saber por que a veces sale y a veces no.. y de ser posible que no salga nunca, porque quema mucho jaja

CODE:
Código
  1. int GetWebCam()
  2. {
  3. hWnd = GetConsoleWindow();
  4.  
  5. Captura = capCreateCaptureWindow("handle", WS_CHILD | WS_VISIBLE, 0, 0, 640, 480, hWnd, 1);
  6.  
  7. if (capDriverConnect(Captura, 0) != 0)
  8. {
  9. EmptyClipboard();
  10. //SendMessage(Captura, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
  11.  
  12. ShowWindow(Captura, SW_HIDE);
  13.  
  14. SendMessage(Captura, WM_CAP_SET_PREVIEW, true, 0);
  15. SendMessage(Captura, WM_CAP_GRAB_FRAME, 0, 0);
  16. SendMessage(Captura, WM_CAP_EDIT_COPY, 0, 0);
  17.  
  18. OpenClipboard(NULL);
  19. HBM = HBITMAP(GetClipboardData(CF_BITMAP));
  20. SaveToFile(HBM, "Imagen.jpg");
  21.  
  22. capDriverDisconnect(Captura);
  23. return 0;
  24. }
  25.  
  26.  
  27. cout << "Error capCreateCaptureWin: " << GetLastError() << endl;
  28. return -1;
  29. }
  30.  

Saludos!

PD: SendMessage(Captura, WM_CAP_DLG_VIDEOSOURCE, 0, 0) Esta comentado porque si dejo esa linea sale siempre el cuadro...

PD2: Creo que GetLastError no tiene uso en este codigo, pero la deje para no editar el codigo que salga todo torcido.


« Última modificación: 7 Abril 2014, 23:03 pm por Vaagish » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.771


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #1 en: 7 Abril 2014, 23:20 pm »

¿Que te podemos decir? El codigo no compila  :silbar: Depuralo con el WinDbg y mira la pila cuando muestre ese dialogo para saber que condicion/es lleva/n a mostrarlo.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #2 en: 7 Abril 2014, 23:31 pm »

Bueno,, ta bien.. código completo la próxima,, intento depurarlo.. pero no te suena que sea algo propio de win7?

La MSDN dice que tenemos esta funcion:
Código
  1. char szDeviceName[80];
  2. char szDeviceVersion[80];
  3.  
  4. for (wIndex = 0; wIndex < 10; wIndex++)
  5. {
  6.    if (capGetDriverDescription(
  7.            wIndex,
  8.            szDeviceName,
  9.            sizeof (szDeviceName),
  10.            szDeviceVersion,
  11.            sizeof (szDeviceVersion)
  12.        ))
  13.    {
  14.        // Append name to list of installed capture drivers
  15.        // and then let the user select a driver to use.
  16.    }
  17. }
  18.  

Y que el usuario elija, pero en la practica hay programas que no abren cuadro de dialogo,, así que se tiene que poder..

Saludos!
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.771


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #3 en: 7 Abril 2014, 23:37 pm »

Depura alguno de esos otros programas  ;D Pones un breakpoint en la llamada a capCreateCaptureWindow y te fijas si por ejemplo hWnd es diferente de 0 (por decir algo, jamas use esta API) o si antes de llamarla usa otras APIs para configurar algo ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #4 en: 7 Abril 2014, 23:48 pm »

Ok,, es un buen lugar por donde empezar.. Tnks!

Saludos! Y si lo logro pongo el code

PD: Una consola que muestra video!!

Código
  1. #include <Windows.h>
  2. #pragma comment(lib, "Vfw32.lib")
  3. #include <Vfw.h>
  4.  
  5. int main()
  6. {
  7.  
  8. HWND hWnd = GetConsoleWindow();
  9. HWND Captura = capCreateCaptureWindow("CaptureWin", WS_CHILD | WS_VISIBLE, 0, 0, 640, 480, hWnd, 1);
  10.  
  11. if (capDriverConnect(Captura, 0) != 0)
  12. {
  13.  
  14. SendMessage(Captura, WM_CAP_DLG_VIDEOSOURCE, 0, 0);
  15.  
  16.  
  17. while (true){
  18. SendMessage(Captura, WM_CAP_SET_PREVIEW, true, 0);
  19. SendMessage(Captura, WM_CAP_GRAB_FRAME, 0, 0);
  20. SendMessage(Captura, WM_CAP_EDIT_COPY, 0, 0);
  21. }
  22.  
  23. SendMessage(Captura, WM_CAP_DRIVER_DISCONNECT, 0, 0);
  24.  
  25. }
  26.  
  27. return 0;
  28. }
  29.  

Por lo menos a mi me muestra la captura de la cámara en el programa de consola, al pasarle el hWnd de la ventana.. :p
« Última modificación: 8 Abril 2014, 00:35 am por Vaagish » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.771


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #5 en: 8 Abril 2014, 00:42 am »

Momento ... ¿Para que mandas ese mensaje?

WM_CAP_DLG_VIDEOSOURCE message

¿Acaso no esta haciendo exactamente lo que le estas pidiendo?  ;D



Remarks
The Video Source dialog box is unique for each capture driver. Some capture drivers might not support a Video Source dialog box. Applications can determine if the capture driver supports this message by checking the fHasDlgVideoSource member of the CAPDRIVERCAPS structure.

En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #6 en: 8 Abril 2014, 00:57 am »

Haa,, si..  en ese caso sale siempre,, si no lo uso ese mensaje sale cuando quiere el cuadro de dialgo,, ojo.. en realidad no quiero que salga... es que estoy combinando cosas.. jaja

PD: Ahora me colgué haciendo pruebas con las funciones para grabar video, pero voy a probar con Olly a ver cuando se produce el llamado al cuadro de dialogo, porque seguro que yo no lo hago, o no es mi intención jaja y en cuanto lo identifique,, te juro que lo mato..  :xD
« Última modificación: 8 Abril 2014, 01:05 am por Vaagish » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.771


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #7 en: 8 Abril 2014, 01:32 am »

Mmm me da la impresion de que estas complicado, me sale el dialogo y hay un solo driver "Microsoft WDM Image Capture (Win32)" (capGetDriverDescription solo retorna datos con index 0) y dos dispositivos de video. Antes tenia deshabilitada la webcam, asi que seguramente cuando hay 2 o mas dispositivos de video te muestra el dialogo, capaz necesitas una API de menor nivel (a dispositivo de video y no capturador).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #8 en: 8 Abril 2014, 01:55 am »

Uff,, ahora estaba intentando con Olly llegar al problema, pero se tranca no se por que.. y WinDbg nunca lo entendí..
En teoría debería tener solo un dispositivo de video, la cámara integrada en la notebook..
Como seria eso de la api de menor nivel?
Comunicarme con el dispositivo directamente y no usar capCreateCaptureWindow?  :¬¬
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.771


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Evitar Cuadro de dialogo "Origen de video"
« Respuesta #9 en: 8 Abril 2014, 02:23 am »

Uff,, ahora estaba intentando con Olly llegar al problema, pero se tranca no se por que.. y WinDbg nunca lo entendí..

Si ejecuto el programa desde WinDbg no funciona bien asi que lo ejecuto normalmente y despues me attacheo con WinDbg.

En teoría debería tener solo un dispositivo de video, la cámara integrada en la notebook..

Si ... pero el Cyberlink DVD instalo un splitter en mi notebook  ::) Asi que hay dos, uno virtual y otro fisico.
Como seria eso de la api de menor nivel?
Comunicarme con el dispositivo directamente y no usar capCreateCaptureWindow?  :¬¬

Me da la impresion que podrias usar DirectShow:
Selecting a Capture Device

Ese codigo me enumero:
CyberLink Webcam Splitter
Device path: \\?\root#media#0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global
HP Webcam-50
Device path: \\?\usb#vid_05c8&pid_0223&mi_00#7&1d1c0389&0&0000#{65e8773d-8f56-11
d0-a3b9-00a0c9223196}\global
Internal Mic (IDT High Definiti
WaveIn ID: 0
Headset Mic (IDT High Definitio
WaveIn ID: 2
Stereo Mix (IDT High Definition
WaveIn ID: 1

 :silbar:
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines