Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Presentado por:
GUAYAQUIL ECUADOR
2013
i
AGRADECIMIENTO
carrera.
DEDICATORIA
TRIBUNAL DE SUSTENTACIN
DECLARACIN EXPRESA
____________________________
RESUMEN
NDICE GENERAL
AGRADECIMIENTO ................................................................................................................. I
DEDICATORIA ......................................................................................................................... II
RESUMEN .............................................................................................................................. V
CAPTULO 1 ............................................................................................................................ 1
CAPTULO 2 ............................................................................................................................ 6
2.3. LIBRERAS............................................................................................................... 16
CAPTULO 3 .......................................................................................................................... 23
CAPTULO 4 .......................................................................................................................... 33
CONCLUSIONES .................................................................................................................. 62
RECOMENDACIONES .......................................................................................................... 63
BIBLIOGRAFA ...................................................................................................................... 84
viii
NDICE DE FIGURAS
FIGURA 1.1 DISPOSITIVO DE ENTRADA IMAGEN DE UN TECLADO TELEVIDEO 925 [9] .......................... 2
FIGURA 1.3 MUESTRA DEL MICROSOFT KINECT DE LA XBOX 360 [16] ............................................... 4
FIGURA 1.4 PARTES QUE CONFORMAN EL KINECT DE LA XBOX 360 DE MICROSOFT [17] .................. 5
FIGURA 1.5 IMAGEN DEL FRUSTUM (SECCIN COLOREADA) EN GRFICOS POR COMPUTADORA [18] .. 5
FIGURA 2.1 MUESTRA DEL RECONOCIMIENTO DEL NMERO 3 EN ESTE PROYECTO ............................ 8
FIGURA 2.3 VISTA DEL USUARIO UTILIZANDO LA APLICACIN CON LAS GAFAS ESTEREOSCPICAS ... 10
FIGURA 2.8 MUESTRA UNA VENTANA PARA SELECCIONAR IMGENES [26] ........................................ 15
FIGURA 2.9 MUESTRA DEL INTERIOR DE UN AUTO UTILIZANDO LAS MANOS [26]................................ 15
FIGURA 2.11 UNA VISTA DE LAS CAPAS DE OPENNI FRAMEWORK [24] ............................................ 19
FIGURA 3.4 CUESTIONARIO SOBRE LAS PRUEBAS PRCTICAS REALIZADAS POR EL USUARIO ........... 31
FIGURA 4.5 LIBRERA DEL API UBICADO EN LA CARPETA DEL PROYECTO DE OPENFRAMEWORKS ... 43
FIGURA 4.7 DEL RANGO DE COLOR DE DIFERENTES CASOS UNO ROJO Y OTRO VERDE..................... 46
FIGURA 4.8 EL PIE IZQUIERDO EST MS CERCA, EL PIE DERECHO ATRS Y LA PARED ..................... 46
FIGURA 4.10 MALLA DE PUNTOS QUE PROYECTA EL KINECT VISTA CON UNA CMARA INFRARROJA 48
FIGURA 4.11 VISTA DE CERCA DE LOS PUNTOS QUE PROYECTA EL KINECT ...................................... 49
FIGURA 4.17 HAZ DE LUZ QUE PROYECTA EL KINECT VISTA DESDE UNA CMARA INFRARROJA......... 51
FIGURA 4.21 FUNCIN PARA DIBUJAR UN CUADRILTERO AL ENCONTRAR LAS MANCHAS ................. 53
FIGURA 4.23 VERIFICAMOS QUE EL REA DE LA MANCHA SEA MAYOR A 1000 PIXELES.................... 54
FIGURA 4.25 TABLA DE COLORES CON LA DISTANCIA DETERMINADA DE ACUERDO AL CASO ............. 56
FIGURA 4.26 FUNCIN PARA DETERMINAR LA DISTANCIA ENTRE DOS PUNTOS ................................. 57
FIGURA 4.28 FUNCIN PARA SIMULAR ACCIN DE PRESIONAR UNA TECLA ....................................... 57
x
FIGURA 4.29 DATOS OBTENIDOS DE LOS USUARIOS SOBRE LA PRECISIN DE LA APLICACIN .......... 59
ANEXO FIGURA 3 RUTA DONDE SE AGREGAN LOS .H DE LAS LIBRERAS EN EL VISUAL STUDIO ....... 73
ANEXO FIGURA 4 RUTA DONDE SE ENCUENTRAN LOS .LIB DE LAS LIBRERAS EN EL PROYECTO ..... 74
ANEXO FIGURA 6 RUTA DONDE AGREGAMOS LOS NOMBRES DE LAS LIBRERAS DE LIBFREENECT Y
OPENCV .................................................................................................................................. 76
NDICE DE TABLAS
TABLA 3.1 EDADES DE LAS PERSONAS A QUIEN SE REALIZARN LAS PRUEBAS ................................. 32
TABLA 4.4 EDADES DE LAS PERSONAS A QUIEN SE REALIZARON LAS PRUEBAS ................................ 58
ANEXO TABLA 2 VALOR HEXADECIMANL PARA LOS COMANDOS EN W INDOWS OS [33] .................. 82
INTRODUCCIN
arquitectnicos, etc. donde la utilizacin del teclado y del ratn tiene sus
limitaciones.
donde integramos las libreras del Kinect con las de procesamiento digital de
un ratn [10] no son los ms adecuados (ver Figura 1.1 y Figura 1.2).
1.2. Justificacin
que apoye los dispositivos sobre una superficie, no es muy til en especial en
gestos para este tipo de aplicaciones, como por ejemplo manipular con las
Windows.
Se utiliz el Microsoft Kinect [11] (ver figura 1.3), porque reduce problemas,
encuentran las manos, con esto se limita el frustum [12] (ver Figura 1.5) de la
proyeccin del haz de luz infrarroja del Kinect para que capture solo la
4
seccin de las manos; por eso es necesario que sea en un lugar abierto para
profundidad con respecto a la posicin del Kinect como referencia, con estos
con esto se puede determinar que accin tomar o realizar, la tcnica utilizada
Figura 1.4 Partes que conforman el Kinect de la Xbox 360 de Microsoft [17]
Figura 1.5 Imagen del frustum (seccin coloreada) en grficos por computadora [18]
CAPTULO 2
2. REVISIN DE LA LITERATURA
2.1. Microsoft Kinect
fue creado por Alex Kipman y desarrollado por Microsoft para la consola
desarrollando y competir con ellos, sacando su propio SDK que slo funciona
en Windows OS.
El kinect consta con una cmara VGA (Video Graphics Array o en espaol
puntos que proyecta el kinect y una cmara VGA estndar (ver Figura 1.4)
para capturar video a 30 cuadros por segundo con una resolucin de 640 por
480 pixeles.
software del kinect, para reconocimiento del cuerpo humano que se usa en
utilizaron los controladores del Kinect para Linux y libreras libres libfreenct
Figura 2.3 Vista del usuario utilizando la aplicacin con las gafas estereoscpicas
La aplicacin desarrollada por Robert Kooima [27] usa OpenNI con los
controladores para Linux. La visualizacin usa Electro VR, y los grficos son
Estas libreras o Kit permiten emular el teclado con una posicin del cuerpo o
usuario puede usar su cuerpo para mover la vista del Google Earth (Ver
Figura 2.5). Para este proyecto se utiliz SDK de Kinect y Microsoft Visual
funcionalidades.
13
Este lenguaje visual permite una interaccin amigable con computadores (ver
Figura 2.6). De esta manera se controla el nmero de acciones por vista y
no se satura con demasiada informacin en una sola pantalla.
Figura 2.9 Muestra del interior de un auto utilizando las manos [26]
16
2.3. Libreras
Esta fue la versin que se tom en cuenta cuando se revisaron las libreras
disponibles para el Kinect. Los drivers de este SDK fueron diseados para el
Kinect de Xbox 360 para aplicaciones no comerciales. En el cual esta versin
tena una estructura en la forma de programar, en cambio meses ms tarde
que se libero la versin comercial del SDK del Kinect, el modo de programar
era totalmente distinto. Haba que pasar todo ese cdigo de la versin beta a
la versin comercial (versin release) para que funcione. Como el SDK
oficial de Microsoft sali tiempo despus, que las libreras creadas por
terceros, haba mucha ms documentacin y ms ejemplos.
Uno de los puntos negativos es que solo funciona para Windows 7 con Visual
Studio 2010, tiene una base de funciones con las que se puede trabajar que
es el tracking de reconocimiento del esqueleto de la persona, y no tiene
soporte para Linux y MacOS.
programacin), quiere decir que hay una coleccin de funciones que pueden
ser usadas con otros lenguajes de programacin para permitir a un cdigo
funcione, junto con otro que no sea compatible (ejemplo Python, javascript,
actionScript).
Las libreras disponibles que pueden ser utilizadas para proyectos utilizando
el Kinect de Microsoft son:
Libfreenect
Esta librera fue desarrollada por la comunidad As3Kinect [1]. Esta librera
incluye los drivers para que Kinect funcione en Windows, Mac OS y Linux.
Del repositorio https://github.com/OpenKinect/libfreenect se descarg el
cdigo fuente que se utilizo para este proyecto. Libfreenect es la librera
principal para el acceso a la cmara USB del Microsoft Kinect y soporta el
acceso a:
Motor
Acelermetro
CL NUI [20]
OpenNI framework
Una de las ventajas que tiene OpenNI framework con CL NUI (es software
licenciado) es que estos 2 diferentes frameworks utilizan el mismo
controlador del kinect por eso son compatibles.
Openframeworks
OpenSceneGraph
QT
OGRE 3D
OpenFrameworks
El cdigo est escrito para ser compatible con muchos lenguajes y sistemas
operativos y soporta 4 ambientes de desarrollo integrado (IDE) (XCode,
Code::Blocks, Visual Studio y Eclipse). Esta API es diseada para ser fcil de
comprender y escribir poco cdigo.
Lo bueno de Openframeworks [6] es la gran variedad de libreras que se les
puede aadir, puedes buscar las que estn disponibles para poder utilizarlas
y extenderlos.
OpenCV
Es una librera de cdigo abierto para visin por computadora [2] donde
existen funciones para procesamiento digital de imgenes. Esta librera
permite analizar las imgenes recibidas del Kinect en tiempo real, para poder
21
Requerimientos funcionales
Los requerimientos funcionales son aquellos que establecen los servicios que
la aplicacin debe proporcionar, en especial lo relacionado a las entradas,
salidas y excepciones.
Requerimientos no funcionales
OS API
OpenCV
La arquitectura de del API est diseada para utilizar funciones del API,
adems de poder utilizar las dems libreras directamente y as implementar
nuevas funcionalidades al API.
La aplicacin utiliza las funciones del API y las del sistema operativo nativo
para poder realizar los gestos, movimiento del puntero o la accin de
presionar una tecla.
La prueba prctica (ver Figura 3.3) que realiza el usuario nos permite
determinar las funcionalidades de la aplicacin.
El cuestionario sobre las pruebas prcticas (ver Figura 3.4), tiene como
objetivo la valoracin cualitativa de la precisin, sensibilidad y control de la
aplicacin a 3 diferentes distancias 110 cm, 150 cm y 190 cm. Con estas
pruebas de usabilidad se desea establecer cmo es la experiencia del
usuario y si los gestos utilizados son los ms adecuados.
1 es psimo
2 malo
3 bueno
4 muy bueno
5 excelente
c: Para acercar el objeto 3D (zoom in), junta las dos manos junto al pecho,
extindelas hacia adelante, sepralas y regresa las manos junto al pecho.
d: Para alejar el objeto 3D (zoom out), extiende los brazos hacia los lados,
muvelos extendidos hacia adelante y regresa las manos junto al pecho.
Figura 3.4 Cuestionario sobre las pruebas prcticas realizadas por el usuario
Para realizar las pruebas del API tambin se procedi a implementar una
aplicacin utilizando el Kinect y donde se llamaba a las funciones del API.
Para el efecto se utilizaron: libfreenect, OpenFrameworks, OpenCV2.1, estas
libreras estn integradas en el Visual Studio 2010 C++.
Cada funcin del API llama o utiliza las libreras de: procesamiento digital de
imgenes, control de las funcionalidades del Kinect de Microsoft,
visualizacin de modelos 3D y control de acciones de Microsoft Windows por
medio de cdigo.
1. bool klGestoAcercar();
Detecta los movimientos de las manos cuando se las une - Retorna Valor
verdadero o falso si se detecta o no el gesto. Esta funcin se la coloca en el
main de la aplicacin, despus de la inicializacin del API.
2. bool klGestoAlejar();
Detecta los movimientos de las manos cuando se las separa - Retorna Valor
verdadero o falso si se detecta o no el gesto. Esta funcin se la coloca en el
main de la aplicacin, despus de la inicializacin del API.
3. bool klGestoClic();
5. void klKinect();
6. void klKinectDatos();
Funcin que encera las variables globales que utilizan las funciones,
siempre hay que colocar esta funcin al final de todos los procesos que
realiza el API. Esta funcin se la coloca en el main al final de los procesos
realizados por el API.
35
1. void klGestoPunteroMover();
Funcin que permite mover el puntero del ratn con cualquiera de las dos
manos (izquierda o derecha). Esta funcin se la coloca en el main de la
aplicacin, despus de la inicializacin del API.
1. void klModelo3DAcercar();
2. void klModelo3DAlejar();
Esta funcin carga un Modelo 3D con extensin .3ds. Los datos de entrada
de esta funcin son uno de tipo string que es la ruta donde se encuentra el
modelo3D en el computador y uno de tipo float que es el valor de la escala
del modelo 3D, siendo 1 el tamao original. Esta funcin se la coloca en el
setup de la aplicacin.
4. void klModelo3DDibujar();
5. void klModelo3DRotarEjeY();
1. void klClicIzquierdo();
Funcin que permite hacer clic Izquierdo como si fuera el botn del ratn.
Esta funcin se la coloca en el main de la aplicacin, despus de la
inicializacin del API.
2. void klClicDobleIzquierdo();
Funcin que permite hacer doble clic Izquierdo como si fuera el botn del
ratn. Esta funcin se la coloca en el main de la aplicacin, despus de la
inicializacin del API.
3. void klClicDerecho();
Funcin que permite hacer clic Derecho como si fuera el botn del ratn.
Esta funcin se la coloca en el main de la aplicacin, despus de la
inicializacin del API.
4. void klClicIzquierdoPresionado();
5. void klClicIzquierdoSoltar();
Funcin que permite realizar la accin de soltar el botn izquierdo del ratn.
Esta funcin se la coloca en el main de la aplicacin, despus de la
inicializacin del API.
38
6. void klGoogleEarthAcercar();
7. void klGoogleEarthAlejar();
2. void klKinect();
3. void klModelo3DAcercar();
4. void klModelo3DAlejar();
5. void klModelo3DRotarEjeY();
6. void klModelo3DDibujar();
7. void klKinectDatos();
Figura 4.5 Librera del API ubicado en la carpeta del proyecto de OpenFrameworks
44
En esta etapa se procesan los datos obtenidos del kinect para determinar el
gesto y luego ejecutar acciones en la aplicacin.
La implementacin e investigacin
Figura 4.7 del rango de color de diferentes casos uno rojo y otro verde
Figura 4.8 El pie izquierdo est ms cerca, el pie derecho atrs y la pared
47
En la figura 4.9 podemos ver lo que ve una cmara infrarroja que es la nube
de puntos.
Figura 4.10 Malla de puntos que proyecta el Kinect vista con una cmara infrarroja
Los puntos visualizados desde ms cerca usando una cmara infrarroja (ver
Figura 4.11), para tener una referencia del dimetro de los puntos que se
separan a mayor distancia se los visualiza a lado de unos dedos.
49
Una demostracin de los puntos que a menor distancia los puntos estn ms
cerca, podemos ver en las figuras 4.12, 4.13, 4.14 y 4.15.
Como vemos en las imgenes los puntos se alejan entre s a mayor distancia
y estn ms juntos a menor distancia por eso hay una distancia mnima que
es de 50 cm. Menor a esta distancia de 50 cm los puntos estn muy
pegados, estn uno encima de otro y se cruzan no dejando determinar bien
los puntos proyectados como lo vemos en la figura 4.16.
51
Figura 4.17 Haz de luz que proyecta el Kinect vista desde una cmara infrarroja
Utilizando las libreras de OpenCV y las funciones para determinar los blobs
o las manchas de la imagen, la imagen que procesamos es la de colores, ver
figura 4.22, aqu vemos las manos que estn siendo captadas por la cmara
y esta imagen es la que se procesa.
Dilatamos un poco la imagen para tener mayor seguridad del blob (Figura
4.19):
Utilizamos un algoritmo que recorre los pixeles y determina los blancos y los
vecinos, para cada contorno encontrado dibujamos una cajita encerrando el
blob (Figura 4.21):
Figura 4.23 Verificamos que el rea de la mancha sea mayor a 1000 pixeles
De acuerdo al valor del color en RGB que obtengamos del pixel ms cercano
de la mano determinamos su posicin, con la tabla de distancia determinada
en el rango de 60 cm a 200 cm. Ver figura 4.25
56
las manos o las estamos acercando cuando hacemos Zoom out o Zoom in
respectivamente (Figura 4.26):
Este es un ejemplo para una funcin de gestos, que puede ser utilizado en el
computador. Todos los datos se guardan en variables globales, para luego
ser usados en las funciones implementadas de los gestos, lo que se utiliza es
la posicin de las manos de los puntos ms cercanos, con esto se pueden
implementar y determinar un gesto.
Se utilizan funciones del Windows API [31] para interactuar con las
aplicaciones del sistema operativo, utilizando funciones como mouse_event
function (Windows) [32], para controlar el ratn.
4.2. Pruebas
Las pruebas se las realizaron a 10 personas (ver Tabla 4.2), entre nios,
adultos, hombres y mujeres. Para recolectar los datos se utilizaron las
pruebas de usabilidad descritas en el diseo de pruebas, en el captulo 3.3.
Las 4 pruebas se las realiza a cada persona, primero a 110 cm, luego a 150
cm y al final a 190 cm de distancia del kinect. Al trmino de las pruebas se
llena la encuesta para saber que le pareci la experiencia de su uso.
4.3. Resultados
C: Para acercar el objeto 3D (zoom in), junta las dos manos junto al pecho,
extindelas hacia adelante, sepralas y regresa las manos junto al pecho.
D: Para alejar el objeto 3D (zoom out), extiende los brazos hacia los lados,
muvelos extendidos hacia adelante y regresa las manos junto al pecho.
Para la precisin (ver figura 4.29) se puede apreciar que las personas que
utilizaron la aplicacin les pareca la mejor experiencia a una distancia de
190 cm desde la posicin del kinect para las 4 encuestas.
mayor, rotar y acercar el objeto les pareca muy bueno, excelente, pero
cuando tenan que alejar, les pareca mejor a una distancia ms cerca
porque se alejaba ms rpido.
El control en todas las pruebas estuvo bien, donde hay mayor contundencia
es a mayor distancia a 190 cm, donde el control de los gestos es excelente
segn los encuestados. El control a una menor distancia estaba bien pero a
mayor distancia es un poco mas estable y agradable el manejo.
61
Con los datos obtenidos de los usuarios observamos que la mayor precisin,
sensibilidad ptima y control en el uso de la aplicacin est a la distancia de
190 cm, en las grficas se observa que la mayor cantidad de personas se
siente mejor al utilizar la aplicacin a esta distancia, y esto se debe a que a
mayor distancia la mano recorre menos pixeles y se puede rotar el objeto con
mayor precisin y la sensibilidad es mejor, porque al estar muy cerca la
sensibilidad es muy alta y al mover un poco la mano se recorren muchos
pixeles y eso hace que rote mas el objeto 3D.
Los gestos utilizados en la aplicacin seran recordados por todos los
encuestados.
Al revisar los resultados nos dimos cuenta que el 90% de las personas se
encuentras bien o satisfechas al usar la aplicacin y un 10% de las personas
frustradas.
CONCLUSIONES
C:\of_v0071_vs2010_release\examples\addons\3DModelLoaderExample,
despus de descomprimir el archivo of_v0071_vs2010_release, luego hay
que compilar los ejemplos.
1.- setupCommandLine.bat
2.- compileAllExamples.bat
En este orden deben ser ejecutados, tardar unos minutos, dependiendo del
procesador del computador
C:\of_v0071_vs2010_release\examples\addons\3DModelLoaderExample el
archivo 3DModelLoaderExample.sln y lo ejecutamos, con esto ya podemos
visualizar los modelos 3D.
Dependencias
6. Cuando todos los errores han sido resueltos, hacemos clic en el boton
"Generate" para crear los makefiles para el Visual Studio 2010.
Hay un dispositivo "Xbox NUI Motor" debera haber uno con el icono
de precaucin (probablemente en "Otros dispositivos") "!". Clic
derecho sobre l, y seleccionar "Actualizar el controlador...", luego
clic en "Buscar software del controlador en el equipo".
El Kinect ahora tiene los controladores para poder ser usados con la librera
libfreenect.
72
Prueba
Con esta configuracin tenemos lista la librera libfreenect para poder utilizar
el Kinect en Windows.
OpenCV
C:\of_v0071_vs2010_release\examples\addons\3DModelLoaderExample
ANEXO Figura 3 Ruta donde se agregan los .h de las libreras en el Visual Studio
ANEXO Figura 4 Ruta donde se encuentran los .lib de las libreras en el proyecto
Se est agregando las rutas donde se encuentran los .lib de las libreras
libfreenct y OpenCV , hacemos clic en Ok y luego en Aplicar.
75
Si est todo bien hacemos clic en Ok, sino agregamos los directorios que se
muestran en ANEXO Figura 5, luego hacemos clic en Ok y Aplicar.
76
ANEXO Figura 6 Ruta donde agregamos los nombres de las libreras de libfreenect y OpenCV
77
C:\Kinect\drivers\freenect_win_deps\lib\glut32.lib
C:\Kinect\drivers\freenect_win_deps\lib\pthreadVC2.lib
C:\Kinect\drivers\freenect_win_deps\lib\msvc\libusb.lib
cv210.lib
cv210d.lib
cvaux210.lib
cvaux210d.lib
cxcore210.lib
cxcore210d.lib
cxcore210d.lib
highgui210.lib
highgui210d.lib
ml210.lib
ml210d.lib
opencv_ffmpeg210.lib
opencv_ffmpeg210d.lib
C:\Kinect\libfreenect\vs\lib\Debug\freenect.lib
C:\Kinect\libfreenect\vs\lib\Debug\freenect_sync.lib
Aplicacin
Drivers
includeWindows
libfreenect
http://www.cxpartners.co.uk/cxblog/Kinect_gestural_interfaces_-_a_usability_study/.
[4] Jakob Nielsen, Kinect Gestural UI: First Impressions, Diciembre 27,
ux.html.
[6] Lieberman Zach, Watson Theodore, and Castro Arturo ("el ncleo
editions/visual-cpp-express
http://www.naturallyinterfacing.com/2011/07/disenando-para-Kinect-nuestro-test-
de.htmlv
http://commons.wikimedia.org/wiki/File:Wheel_mouse.JPG?uselang=es
http://commons.wikimedia.org/wiki/File:Televideo925Terminal.jpg?uselang=es
http://es.wikipedia.org/wiki/Frustum
http://blog.Kinectfordevelopers.com/2012/03/01/diferencias-entre-Kinect-xbox-360-y-
Kinect-for-windows/
[16] Bosque Jess, Imagen Kinect for Xbox 360, Partes que conforman el
http://xbox360.ongames.com/noticia_ya-hay-mas-de-un-millon-de-Kinect-vendidos-
en-el-mundo_Kinect
[17] Ifixit, Imagen Kinect desarmado, Partes internas y externas del Kinect,
http://en.wikipedia.org/wiki/Viewing_frustum
http://nexobit.com/2010/01/06/windows-8-distinto-a-todo-lo-conocido/
[20] Code Laboratories, CL NUI, Librera para usar el Kinect de Microsoft
http://codelaboratories.com/kb/nui
[21] Code Laboratories, Imagen CL NUI, Imagen del test tomada del
http://codelaboratories.com/kb/nui
http://openni.org/About.aspx
http://openni.org/Documentation/ProgrammerGuide.html
http://www.youtube.com/user/harishankarn
en: http://www.evoluce.com
Disponible en : http://csc.lsu.edu/~kooima/installations.html
[28] Universidad Southtern Carolina, FAAST, desarrolla un conjunto de
http://www.youtube.com/watch?feature=player_embedded&v=62wj8eJ0FHw
http://www.youtube.com/watch?v=5vYnwiCkk-g
http://www.kinemote.net/
[31] Microsoft, Windows API, Los comandos para controlar Windows son
http://msdn.microsoft.com/en-us/library/windows/desktop/ff657751(v=vs.85).aspx
[32] Microsoft, Mouse Event Function, Funciones del Win API para
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ff468861(v=vs.85).aspx
[35] Esqueda Elizondo Jos Jaime y Palafox Maestre Luis Enrique,
http://books.google.com.ec/books?id=h4Gj8GuwPVkC&lpg=PA1&pg=PA1#v=onepag
e&q&f=false