Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Win Api y otras dudas

Estas en el tema de Win Api y otras dudas en el foro de C/C++ en Foros del Web. Holas, después de terminar con varios tutoriales de C++ me aconsejaron meterme con WinApi para aprender a salir de la tabla de comandos y crear ...
  #1 (permalink)  
Antiguo 25/08/2011, 10:23
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Win Api y otras dudas

Holas, después de terminar con varios tutoriales de C++ me aconsejaron meterme con WinApi para aprender a salir de la tabla de comandos y crear una interfaz para los programas, el problema es que no encuentro ningún tutorial o guía que me ayude aprender. He probado con "C con Clase" ( http://winapi.conclase.net/curso/index.php ) pero no explica los códigos ni sus funciones, solo te dice cómo se usan... He estado mirando por internet y la mayoría están en inglés (me cuesta entender las explicaciones informáticas en inglés). Asi que a ver si me podéis aconsejar algún libro o tutorial para aprender Win Api desde cero (sé manejar C++: funciones, punteros, referencias, loops complejos, herencias y un largo etcétera, vamos, lo que viene en el 90% de los tutoriales de C++). Además tengo unas dudillas:

- ¿Win Api sirve entre otras cosas para crear aplicaciones que manejen internet (actualizar, descargar, conectar a páginas, etc.) o solo es para crear una interfaz para los programas?.

- También me gustaría saber de alguna guia dedicada a las funciones de los SO (Windows principalmente), es decir, poder llevar acabo acciones como es mover un archivo, acceder al disco duro, manejar dispositivos, obtener iformación del hardware, etc.

- ¿Lo que se programe en Win Api sirve para otros sistemas operativos como es Linux?.

Todo esto surge debido a que después de acabar varios tutoriales de C++ (aqui podéis ver el temario: http://c.conclase.net/curso/index.php ) no sé por dónde continuar; un forero de otra página me ha hecho varias sugerencias como es el aprender a usar las funciones de los SO y manejar Win Api pero no encuentro manuales en castellano.

Gracias por adelantado. Saludos.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...

Última edición por Anonimo12; 25/08/2011 a las 10:59
  #2 (permalink)  
Antiguo 25/08/2011, 11:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Win Api y otras dudas

Winapi es un paquete de funciones que provee windows para el desarrollo de programas. Con estas funciones realmente puedes hacer cualquier cosa en windows... Tienes que leer sobre winapi y como funciona windows, asi te sera mas facil.

Con winapi puedes manejar discos y archivos. Tambien puedes manejar procesos cargados o creas ventanas para tu proceso.

Para internet vas a necesitar usar socket o winsocket, la variante para windows. Cuando hablas de actualizar conectar a paginas, a que te refieres??
  #3 (permalink)  
Antiguo 25/08/2011, 11:24
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Win Api y otras dudas

Muchísimas gracias, asi que Win Api es una especie de "extensión" de C++ que añade más funciones.

Cita:
Para internet vas a necesitar usar socket o winsocket, la variante para windows. Cuando hablas de actualizar conectar a paginas, a que te refieres??
Solo eran ejemplos, me refiero a poder crear herramientas que conecten a internet como por ejemplo un programa P2P o una aplicación que se auto-actualice, es decir, cualquier cosa que vaya a usar internet.

Pero aun asi me gustaría que me aconsejarais de algún tutorial/guía/libro (en castellano) para aprender a usar Win Api.

Otra cosa, si Win Api está orientado a Windows, las herramientas creadas con ello no servirán para otro sistema operativo ¿verdad?; ¿existe algún "pack de funciones" que sirva para cualquier SO en general?.

Gracias de nuevo, saludos.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...
  #4 (permalink)  
Antiguo 25/08/2011, 12:28
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Win Api y otras dudas

Primero.

Es un error considerar que Winapi es una extension de C++.

C++ por si solo es un lenguaje totalmente independiente de la plataforma(del sistema operativo).

Lo que hace a C y a C++ tan util en la mayoria de los sistemas operativos, es que tiene un libreria estandar(stdio, stdlib, iostream...etc).
Esta libreria estandar se programa para cada sistema operativo de manera diferente, pero que el resultado sea siempre el mismo. Por eso puedes usar C y C++ en practicamente cualquier sistema con un compilador.

Ahora. Hablemos de Windows.
Cada sistema operativo tiene sus propias caracteristicas y su forma de "hacer las cosas"

Los que desarrollaron windows decidieron crear un paquete que "ayudara" a las programadores a que sus programas interactuen con windows de la mejor manera(usando ventanas, raton.... etc).
A este paquete lo llamaron WINAPI(Windows API: Windows Application Programming Interface). Que como el nombre lo dices es una interfaz para comunicarte con el sistema operativo windows.

Ahora, sabiendo que Windows lleva en el mercado ya bastante años, su Winapi ha ido mejorando para cada vez ofrecer mas funcionalidad, y control sobre lo que quieres hacer.

Si este "paquete" fue creado por windows, seria muy ingenuo pensar que puedes usarlo en otros sistemas operativos. Como te dije antes, cada sistema operativo tiene su forma de hacer las cosas.

Por ejemplo en Linux existe una division muy clara(en windows tambien, pero no es tan clara) entre el sistema en si y el ambiente grafico(ventanas).
Por lo tanto Linux como tal no tiene una manera propia de pintar ventanas.
En este caso, lo mas comun ahora es el sistema "X". X es un sistema cliente-servidor que se acopla con el kernel de linux y ofrece un "interfaz" grafica para este.
Por si no fuera poco, X no ofrece mas que el ambiente grafico. Osea, nada de escritorios bonitos, ni de barras de tareas o de inicio. Para esto existen una amplia variedad de escritorios, entre los mas comunes estan KDE, GNOME, XFCE, Fluxbox, etc.
Estos son los que se encargan de los iconos, los escritorios, que las ventanas se vean bonitas, de que tengas menus, etc, etc.

Entonces como veras tiene por lo menos 2 niveles para programar.
X tiene su propio paquete para que programes llamado Xlibs, totalmente diferente a WINAPI.

Y aparte existen otros "paquetes" que se acoplan mas con los escritorios como QT o GTK para KDE y GNOME respectivamente. Igual. cada uno de estos totalmente distinto al otro.

Y cada sistema operativo tiene sus propios paquetes y formas para programar usando todas sus caracteristicas.

Si te quieres centrar en Windows, lo mas recomendable siempre es la MSDN. Aunque esta en ingles. Dudo que haya un tutorial lo bastante completo y explicado en español, ya que es un tema extremadamente largo, complejo, y a la larga hay otras alternativas mas atractivas.

Espero haber aclarado el panorama.

Saludos
  #5 (permalink)  
Antiguo 25/08/2011, 14:10
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Win Api y otras dudas

Muchísimas gracias, una respuesta sencilla y bien explicada, ahora lo entiendo mejor.

Cita:
Si te quieres centrar en Windows, lo mas recomendable siempre es la MSDN. Aunque esta en ingles. Dudo que haya un tutorial lo bastante completo y explicado en español, ya que es un tema extremadamente largo, complejo, y a la larga hay otras alternativas mas atractivas.
Justo lo contrario, lo que busco es extender las aplicaciones a varias plataformas, pero si es muy complicado de primeras entonces no me importa empezar con Win Api y luego explorar otros "paquetes de funciones" para Linux u otro sistema operativo.

Lo que me está resultando algo complicado es encotrar un buen manual para Win Api, pero seguiré buscando.

De nuevo gracias por tu tiempo. Saludos.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...
  #6 (permalink)  
Antiguo 25/08/2011, 15:01
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Win Api y otras dudas

Mira estos tutoriales

http://msdn.microsoft.com/es-es/library/bb384843.aspx

http://winapi.conclase.net/curso/ind...cap=000#inicio

Tienes que juntar informacion de varios tutoriales...larguate con uno y lo que te quede flojo buscalo en google.
  #7 (permalink)  
Antiguo 26/08/2011, 20:26
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Win Api y otras dudas

Muchas gracias, llevo varias horas dándole vueltas, haciendo pruebas y poco a poco me voy enterando de cómo funciona. Sin embargo lo de las Api lo veo muy límitado y creo que no me he explicado bien, pues he mirado el temario en varios manuales y de lo único que habla es de crear una interfaz y algunas funciones específicas; vale eso es parte de lo que buscaba, pero estoy más interesado en encontrar una guía para seguir avanzado como programador propiamente dicho, es decir, códigos con los que pueda crear archivos, modificar formatos, acceder y testear dispositivos, leer imágenes, reproducir vídeos... vamos, poder hacer algo que no sea una calculadora porque las funciones, clases, loops, punteros, referencias, herencias y un largo etcétera de momento solo me valen para hacer cálculos matemáticos y guardar frases...

Espero haberme explicado bien, asi que a ver si me podéis aconsejar algún tutorial o "API específica" para explorar estas funciones y si es posible que sirva para más de un sistema operativo, porque lo de la Win Api que solo vale para Windows me echa atrás...

Pongo un ejemplo:

Código C++:
Ver original
  1. #include <windows.h>
  2.  
  3.       int main()
  4.       {
  5. HANDLE hToken;
  6. TOKEN_PRIVILEGES tokpr;
  7. if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  8.       {
  9. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tokpr.Privileges[0].Luid);
  10. tokpr.PrivilegeCount = 1;
  11. tokpr.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  12. if(AdjustTokenPrivileges(hToken, FALSE, &tokpr, 0, (PTOKEN_PRIVILEGES)NULL, 0))
  13.       {
  14. ExitWindowsEx(EWX_REBOOT,NULL);
  15. }
  16. }
  17. }

Es un mini-programa hecho por P4|3L0 y posteado en DarkC0de ( http://darkc0de.net/foro/index.php?topic=160.0 ) cuya función es reiniciar el PC, una cosa muy básica y sencilla, pues no encuentro ningún manual de C++ donde se expliquen este tipo de funciones.

Esto es simplemente un ejemplo, no encuentro ninguna guía que te enseñe a interactuar con el PC en si, solo a hacer cálculos y manejar datos básicos y el problema es que como soy un iniciado en la programación tampoco sé con qué otras palabras clave puedo buscarlo.

Perdonad las molestias, para cualquier respuesta gracias por adelantado, saludos.

EDITO: Después de estar leyendo un buen rato, creo que todo lo que he comentado se hace estudiando librerías específicas que llevan esas funciones ¿o me equivoco?... y si es asi ¿por cuál debería empezar? (si es posible que sea independiente del sistema operativo ya que una de las cosas que más me llamaba la atención de C++ es que no depende de ninguna plataforma).

PD: Sea o no sea con librerías me gustaría que me explicarais cómo va el tema y que me respondierais a las preguntas que he formulado para quitarme las dudas, de nuevo gracias. Saludos.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...

Última edición por Anonimo12; 26/08/2011 a las 22:02
  #8 (permalink)  
Antiguo 26/08/2011, 22:49
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Win Api y otras dudas

Lo que pasa es que quieres abarcar bastantes cosas.

Cada cosa que mencionas es un tema distinto que podria caber en un par de libros minimo.

Ahora. WINAPI definitivamente noe s lo mas sencillo. Para mi gusto, es de lo mas complicado que hay.
Yo optaria por usar una interfaz como wxWidgets, GTk, o tal vez QT. estas 3 estan diseñadas para ser multiplataforma.

Aunque el objetivo de las 3 es programar "ventanas", cada una tiene sus caracteristicas adicionales, como conexion con bases de datos, hilos, conexion con Opengl o DirectX, etc.

Para hacer cosas mas "sofisticadas", como el manejo de dispositivos, entonces no hay algo estandar. Cada sistema operativo lo maneja diferente.

Para Windows no hay de otra mas que la WINAPI.
La MSDN describe ampliamente todas y cada una de sus funciones, estructuras, variables, tipos, etc.

Linux trae sus librerias del sistema. Desde los famosos "kernel headers", "syslibs", etc.

No hay una manera comun de manejar dispositivos en cada sistema operativo.

Si tienes dudas sobre codigos, puedes buscar en google las funciones para que sepas que hacen y como usarlas.

Pero si es un trabajo arduo.

Saludos
  #9 (permalink)  
Antiguo 27/08/2011, 10:40
Avatar de Munire  
Fecha de Ingreso: julio-2010
Ubicación: en el ciberdespacio (España)
Mensajes: 150
Antigüedad: 13 años, 9 meses
Puntos: 4
Respuesta: Win Api y otras dudas

mira aqui tienes una lista de las funciones de la API de Windows ordenada por categorias.

http://msdn.microsoft.com/en-us/library/aa383686

de manera que si en tu programa necesitas saber por ejemplo informacion del disco duro, te vas a la categoria Disk Management y ahi ves las funciones disponibles:

GetDiskFreeSpace
Retrieves information about the specified disk, including the amount of free space on the disk.
GetDiskFreeSpaceEx
Retrieves information about the amount of space that is available on a disk volume, which is the total amount of space, the total amount of free space, and the total amount of free space available to the user that is associated with the calling thread.

a la que te interese le das y ves los argumentos. por ejemplo:


BOOL WINAPI GetDiskFreeSpaceEx(
__in_opt LPCTSTR lpDirectoryName,
__out_opt PULARGE_INTEGER lpFreeBytesAvailable,
__out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
__out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
);


para utilizarla le pasas como primer argumento el nombre del directorio. que si lees un poco

lpDirectoryName [in, optional]
A directory on the disk.

If this parameter is NULL, the function uses the root of the current disk.


si pones NULL te dara la informacion del disco duro, en vez de una carpeta.

creas variables del tipo PULARGE_INTEGER para los argumentos restantes de la funcion.

llamas a la funcion en tu programa

...
GetDiskFreeSpaceEx(..., ..., ..., ...);
...

y modificara las variables que has creado poniendo el numero total de bytes libres (en el caso de lpTotalNumberOfFreeBytes )


ahora solo queda imprimir por pantalla la variable lpTotalNumberOfFreeBytes. y ya tienes tu programa para calcular el espacio libre del disco.


no soy un experto en el tema por lo que si algo esta mal decidmelo. Mi intencion es guiarte, para que te hagas una idea de como se usa esto.
  #10 (permalink)  
Antiguo 27/08/2011, 17:45
 
Fecha de Ingreso: abril-2009
Ubicación: En foros del web, normalmente en Web general, HTML y CSS.
Mensajes: 258
Antigüedad: 15 años
Puntos: 3
Respuesta: Win Api y otras dudas

Vaya muchísimas gracias por la explicación, me pondré a probar las funciones.
__________________
¿Por qué Anónimo?, porque como está el mundo no podemos considerarnos humanos...

Etiquetas: api, código, dudas, funcion, programa, win7
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:35.