Autor Tema: Proyecto en Autohotkey - Lanzador de juegos Mame  (Leído 5334 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Proyecto en Autohotkey - Lanzador de juegos Mame
« en: Enero 19, 2015, 09:54:35 am »
Advertisement
Como continuación del tuto de Qué es Autohotkey vamos a intentar hacer un pequeño tutorial o paso a paso para crear un pequeño lanzador de juegos mame.

Algunas de las cosillas que se verán son:
+ trabajar con ficheros ini (crearlos, leer datos, grabar)
+ trabajar con Gui
+ Para nota será intentar crear un generador de layouts (esto no tengo claro como se hace, jeje)

Una pequeña vista tonta del lanzador


Empezaré en breve ...




Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #1 en: Enero 19, 2015, 09:54:53 am »
Ficheros ini
Mucha gente dirá que están obsoletos (lo he leído por ahí en algunos sitios) pero la verdad es que para pequeños ficheros de configuración a mí personalmente me vienen bien y además en este caso Autohotkey implementa algunas funciones muy fáciles de usar para trabajar con ellos.
Estos ficheros ini se dividen en distintas secciones cuyos nombres iran entre corchetes [] y luego dentro de cada sección iran los distintos parámetros/variables seguidas por un símbolo = para finalmente colocar detrás el valor que queramos.
De lo que se trata es que desde fuera de nuestro programa cargar distintos valores para variables internas con las que nuestro programa trabaja.

Por poner un ejemplo, es un ini algo largo voy a poner el de nuestro programita lanzador de juegos Mame.
El ini es el siguiente
Spoiler: mostrar

[General]
Version=0.2 by @empardopo
KeyToLaunchGames=1
KeyToCloseFE=q
KeyListGameUp=P
KeyListGameDown=L
[Mame]
Path=E:\Empardopo\Emuladores\wolfmame-0151
Exe=mame.exe
Snaps=E:\Empardopo\Emuladores\wolfmame-0151\snap
Video=
Roms=E:\Empardopo\Emuladores\wolfmame-0151\roms
RomsExtension=7z
RomsList=E:\Empardopo\Emuladores\wolfmame-0151\testLista.xml
Bats=E:\Empardopo\Emuladores\wolfmame-0151
[Layout]
Title=ARCADESPAIN
TitleX=230
TitleY=50
TitleW=390
TitleH=60
TitleFont=Tahoma
TitleFontSize=38
TitleFontColor=blue
TitleFontBold=italic
TitleTransparent=1
TitleVisible=1
backgroundFile=E:\Empardopo\Emuladores\wolfmame-0151\snap\1280x960Background.png
backgroundX=0
backgroundY=0
backgroundW=1280
backgroundH=960
backgroundVisible=1
logoFile=E:\Empardopo\Emuladores\wolfmame-0151\snap\1280x960Background.png
logoX=10
logoY=10
logoW=150
logoH=150
logoTransparent=1
logoAngle=0
logoVisible=0
snapFile=E:\Empardopo\Emuladores\wolfmame-0151\snap\ArcadeSpain.png
snapX=275
snapY=95
snapW=405
snapH=305
snapTransparent=1
snapAngle=0
snapVisible=1
MarqueeFile=c:\A500.png
MarqueeX=20
MarqueeY=450
MarqueeW=150
MarqueeH=150
MarqueeTransparent=1
MarqueeAngle=0
MarqueeVisible=1
listBoxX=260
listBoxY=845
listBoxW=350
listBoxH=20
listBoxFont=Tahoma
listBoxFontSize=25
listBoxFontColor=0xFF0000
listBoxFontBold=bold
listBoxVisible=1
image1File=c:\Bruce.gif
image1X=500
image1Y=500
image1W=150
image1H=150
image1Transparent=1
image1Angle=0
image1Visible=0
image2File=
image2X=0
image2Y=0
image2W=0
image2H=0
image2Transparent=1
image2Angle=0
image2Visible=1
image3File=
image3X=0
image3Y=0
image3W=0
image3H=0
image3Transparent=1
image3Angle=0
image3Visible=0
AnimationFile=c:\Bruce.gif
AnimationX=800
AnimationY=600
AnimationW=170
AnimationH=200
AnimationVisible=1
[Sound]
MusicBackground=
LaunchGameSound=
ListGameUpSound=
ListGameDownSound=


Ya he dicho que era un poco largo, jeje.

En nuestro fichero podemos ver que las secciones son General,Mame,Layout y Sound. Podríamos poner tantas como queramos. Lo ideal es intentar ordenar nuestras variables dentro de las secciones más o menos que le vengan bien.

Las funciones con las que Autohotkey maneja estos ficheros son dos:
IniWrite, Value, Filename, Section [, Key]
IniRead, OutputVar, Filename [, Section, Key, Default]
(sacado de la propia ayuda de Autohotkey)

Como se puede intuir con IniWrite se escribe en el fichero ini. ¿Dónde? Pues escribiremos el valor que queramos, en nuestro fichero ini, en la sección correspondiente y nuestra variable o key correspondiente.
Por el contrario, con IniRead leeremos el valor de la key que queramos de la sección que queramos de nuestro fichero ini y almacenaremos el valor correspondiente en una variable.

Como ejemplo, un par de líneas de código de nuestro lanzador.
Código: [Seleccionar]
IniWrite,0, %ficheroIni%,Layout,backgroundX
La línea anterior escribirá el valor 0 (cero) en el contenido de la variable ficheroIni (es decir, en nuestro fichero ini) en la sección Layout y en este caso en la key backgroundX.

También del código de nuestro programa otra línea de código
Código: [Seleccionar]
IniRead, VersionTemp, %ficheroIni%,General,Version
En este caso, leeremos de nuestro fichero ini (contenido de la variable ficheroIni) el contenido  de la clave Version en la sección General y  el valor resultante lo almacenaremos en la variable de nuestro programa VersionTemp. En este caso la variable de nuestro programa se ha llamado VersionTemp pero podría haberse llamado Version que sería el mismo nombre que la key de nuestro fichero ini y no hay problemas por ello.

Librerías
Sin profundizar demasiado ni dando mucha teoría sólo diré así por encima que las librerías serán como una gran caja en la que meteremos funciones que luego podremos llamar desde nuestro programa. Pero claro, para poder llamarlas nuestro programa deberá saber que esta librería debe trabajar con nuestro programa y eso se le dice por medio de la instrucción siguiente:
Código: [Seleccionar]
#Include LibFEArcadeSpain.ahk
En el ejemplo anterior, le estamos diciendo a nuestro programa que queremos que incluya en nuestro programa la librería LibFEArcadeSpain.ahk (en este caso deberá estar en el mismo directorio que nuestro script principal). Al incluirla, ya serán visibles para nuestro programa las funciones que hayamos declarado en dicha librería.

Como ejemplo, pongo el contenido actual de dicha librería de nuestro programa lanzador
Spoiler: mostrar

Código: [Seleccionar]
CrearFicheroIni(ficheroIni){
temp:=""
IniWrite,%temp%, %ficheroIni%,General,Version
IniWrite,%temp%, %ficheroIni%,General,KeyToLaunchGames
IniWrite,%temp%, %ficheroIni%,General,KeyToCloseFE
IniWrite,%temp%, %ficheroIni%,General,KeyListGameUp
IniWrite,%temp%, %ficheroIni%,General,KeyListGameDown
IniWrite,%temp%, %ficheroIni%,Mame,Path
IniWrite,%temp%, %ficheroIni%,Mame,Exe
IniWrite,%temp%, %ficheroIni%,Mame,Snaps
IniWrite,%temp%, %ficheroIni%,Mame,Video
IniWrite,%temp%, %ficheroIni%,Mame,Roms
IniWrite,%temp%, %ficheroIni%,Mame,RomsExtension
IniWrite,%temp%, %ficheroIni%,Mame,RomsList
IniWrite,%temp%, %ficheroIni%,Mame,Bats
IniWrite,%temp%, %ficheroIni%,Layout,Title
IniWrite,%temp%, %ficheroIni%,Layout,TitleX
IniWrite,%temp%, %ficheroIni%,Layout,TitleY
IniWrite,%temp%, %ficheroIni%,Layout,TitleW
IniWrite,%temp%, %ficheroIni%,Layout,TitleH
IniWrite,%temp%, %ficheroIni%,Layout,TitleFont
IniWrite,%temp%, %ficheroIni%,Layout,TitleFontSize
IniWrite,%temp%, %ficheroIni%,Layout,TitleFontColor
IniWrite,%temp%, %ficheroIni%,Layout,TitleFontBold
IniWrite,0, %ficheroIni%,Layout,TitleTransparent
IniWrite,0, %ficheroIni%,Layout,TitleVisible
IniWrite,%temp%, %ficheroIni%,Layout,backgroundFile
IniWrite,0, %ficheroIni%,Layout,backgroundX
IniWrite,0, %ficheroIni%,Layout,backgroundY
IniWrite,600, %ficheroIni%,Layout,backgroundW
IniWrite,600, %ficheroIni%,Layout,backgroundH
IniWrite,0, %ficheroIni%,Layout,backgroundVisible
IniWrite,%temp%, %ficheroIni%,Layout,logoFile
IniWrite,10, %ficheroIni%,Layout,logoX
IniWrite,10, %ficheroIni%,Layout,logoY
IniWrite,150, %ficheroIni%,Layout,logoW
IniWrite,150, %ficheroIni%,Layout,logoH
IniWrite,0, %ficheroIni%,Layout,logoTransparent
IniWrite,0, %ficheroIni%,Layout,logoAngle
IniWrite,0, %ficheroIni%,Layout,logoVisible
IniWrite,%temp%, %ficheroIni%,Layout,snapFile
IniWrite,300, %ficheroIni%,Layout,snapX
IniWrite,200, %ficheroIni%,Layout,snapY
IniWrite,230, %ficheroIni%,Layout,snapW
IniWrite,230, %ficheroIni%,Layout,snapH
IniWrite,0, %ficheroIni%,Layout,snapTransparent
IniWrite,0, %ficheroIni%,Layout,snapAngle
IniWrite,0, %ficheroIni%,Layout,snapVisible
IniWrite,%temp%, %ficheroIni%,Layout,MarqueeFile
IniWrite,%temp%, %ficheroIni%,Layout,MarqueeX
IniWrite,%temp%, %ficheroIni%,Layout,MarqueeY
IniWrite,%temp%, %ficheroIni%,Layout,MarqueeW
IniWrite,%temp%, %ficheroIni%,Layout,MarqueeH
IniWrite,0, %ficheroIni%,Layout,MarqueeTransparent
IniWrite,0, %ficheroIni%,Layout,MarqueeAngle
IniWrite,0, %ficheroIni%,Layout,MarqueeVisible
IniWrite,%temp%, %ficheroIni%,Layout,image1File
IniWrite,0, %ficheroIni%,Layout,image1X
IniWrite,0, %ficheroIni%,Layout,image1Y
IniWrite,0, %ficheroIni%,Layout,image1W
IniWrite,0, %ficheroIni%,Layout,image1H
IniWrite,0, %ficheroIni%,Layout,image1Transparent
IniWrite,0, %ficheroIni%,Layout,image1Angle
IniWrite,0, %ficheroIni%,Layout,image1Visible
IniWrite,%temp%, %ficheroIni%,Layout,image2File
IniWrite,0, %ficheroIni%,Layout,image2X
IniWrite,0, %ficheroIni%,Layout,image2Y
IniWrite,0, %ficheroIni%,Layout,image2W
IniWrite,0, %ficheroIni%,Layout,image2H
IniWrite,0, %ficheroIni%,Layout,image2Transparent
IniWrite,0, %ficheroIni%,Layout,image2Angle
IniWrite,0, %ficheroIni%,Layout,image2Visible
IniWrite,%temp%, %ficheroIni%,Layout,image3File
IniWrite,0, %ficheroIni%,Layout,image3X
IniWrite,0, %ficheroIni%,Layout,image3Y
IniWrite,0, %ficheroIni%,Layout,image3W
IniWrite,0, %ficheroIni%,Layout,image3H
IniWrite,0, %ficheroIni%,Layout,image3Transparent
IniWrite,0, %ficheroIni%,Layout,image3Angle
IniWrite,0, %ficheroIni%,Layout,image3Visible
IniWrite,%temp%, %ficheroIni%,Layout,listBoxX
IniWrite,%temp%, %ficheroIni%,Layout,listBoxY
IniWrite,%temp%, %ficheroIni%,Layout,listBoxW
IniWrite,%temp%, %ficheroIni%,Layout,listBoxH
IniWrite,%temp%, %ficheroIni%,Layout,listBoxFont
IniWrite,%temp%, %ficheroIni%,Layout,listBoxFontSize
IniWrite,%temp%, %ficheroIni%,Layout,listBoxFontColor
IniWrite,%temp%, %ficheroIni%,Layout,listBoxFontBold
IniWrite,%temp%, %ficheroIni%,Layout,listBoxVisible
IniWrite,%temp%, %ficheroIni%,Layout,AnimationFile
IniWrite,0, %ficheroIni%,Layout,AnimationX
IniWrite,0, %ficheroIni%,Layout,AnimationY
IniWrite,0, %ficheroIni%,Layout,AnimationW
IniWrite,0, %ficheroIni%,Layout,AnimationH
IniWrite,0, %ficheroIni%,Layout,AnimationVisible
IniWrite,%temp%, %ficheroIni%,Sound,MusicBackground
IniWrite,%temp%, %ficheroIni%,Sound,LaunchGameSound
IniWrite,%temp%, %ficheroIni%,Sound,ListGameUpSound
IniWrite,%temp%, %ficheroIni%,Sound,ListGameDownSound
}

ActualizarValoresIni(ficheroIni){
IniWrite,%VersionTemp%, %ficheroIni%,General,Version
IniWrite,%KeyToLaunchGames%, %ficheroIni%,General,KeyToLaunchGames
IniWrite,%KeyToCloseFE%, %ficheroIni%,General,KeyToCloseFE
IniWrite,%KeyListGameUp%, %ficheroIni%,General,KeyListGameUp
IniWrite,%KeyListGameDown%, %ficheroIni%,General,KeyListGameDown
IniWrite,%Pathtemp%, %ficheroIni%,Mame,Path
IniWrite,%Exetemp%, %ficheroIni%,Mame,Exe
IniWrite,%Snapstemp%, %ficheroIni%,Mame,Snaps
IniWrite,%Videotemp%, %ficheroIni%,Mame,Video
IniWrite,%Romstemp%, %ficheroIni%,Mame,Roms
IniWrite,%RomsExtensionTemp%, %ficheroIni%,Mame,RomsExtension
IniWrite,%RomsListTemp%, %ficheroIni%,Mame,RomsList
IniWrite,%Bats%, %ficheroIni%,Mame,Bats
IniWrite,%Title%, %ficheroIni%,Layout,Title
IniWrite,%TitleX%, %ficheroIni%,Layout,TitleX
IniWrite,%TitleY%, %ficheroIni%,Layout,TitleY
IniWrite,%TitleW%, %ficheroIni%,Layout,TitleW
IniWrite,%TitleH%, %ficheroIni%,Layout,TitleH
IniWrite,%TitleFont%, %ficheroIni%,Layout,TitleFont
IniWrite,%TitleFontSize%, %ficheroIni%,Layout,TitleFontSize
IniWrite,%TitleFontColor%, %ficheroIni%,Layout,TitleFontColor
IniWrite,%TitleFontBold%, %ficheroIni%,Layout,TitleFontBold
IniWrite,%TitleTransparent%, %ficheroIni%,Layout,TitleTransparent
IniWrite,%TitleVisible%, %ficheroIni%,Layout,TitleVisible
IniWrite,%backgroundFile%, %ficheroIni%,Layout,backgroundFile
IniWrite,%backgroundX%, %ficheroIni%,Layout,backgroundX
IniWrite,%backgroundY%, %ficheroIni%,Layout,backgroundY
IniWrite,%backgroundW%, %ficheroIni%,Layout,backgroundW
IniWrite,%backgroundH%, %ficheroIni%,Layout,backgroundH
IniWrite,%backgroundVisible%, %ficheroIni%,Layout,backgroundVisible
IniWrite,%logoFile%, %ficheroIni%,Layout,logoFile
IniWrite,%logoX%, %ficheroIni%,Layout,logoX
IniWrite,%logoY%, %ficheroIni%,Layout,logoY
IniWrite,%logoW%, %ficheroIni%,Layout,logoW
IniWrite,%logoH%, %ficheroIni%,Layout,logoH
IniWrite,%logoTransparent%, %ficheroIni%,Layout,logoTransparent
IniWrite,%logoAngle%, %ficheroIni%,Layout,logoAngle
IniWrite,%logoVisible%, %ficheroIni%,Layout,logoVisible
IniWrite,%snapFile%, %ficheroIni%,Layout,snapFile
IniWrite,%snapX%, %ficheroIni%,Layout,snapX
IniWrite,%snapY%, %ficheroIni%,Layout,snapY
IniWrite,%snapW%, %ficheroIni%,Layout,snapW
IniWrite,%snapH%, %ficheroIni%,Layout,snapH
IniWrite,%snapTransparent%, %ficheroIni%,Layout,snapTransparent
IniWrite,%snapAngle%, %ficheroIni%,Layout,snapAngle
IniWrite,%snapVisible%, %ficheroIni%,Layout,snapVisible
IniWrite,%MarqueeFile%, %ficheroIni%,Layout,MarqueeFile
IniWrite,%MarqueeX%, %ficheroIni%,Layout,MarqueeX
IniWrite,%MarqueeFile%, %ficheroIni%,Layout,MarqueeY
IniWrite,%MarqueeY%, %ficheroIni%,Layout,MarqueeW
IniWrite,%MarqueeH%, %ficheroIni%,Layout,MarqueeH
IniWrite,%MarqueeTransparent%, %ficheroIni%,Layout,MarqueeTransparent
IniWrite,%MarqueeAngle%, %ficheroIni%,Layout,MarqueeAngle
IniWrite,%MarqueeVisible%, %ficheroIni%,Layout,MarqueeVisible
IniWrite,%image1File%, %ficheroIni%,Layout,image1File
IniWrite,%image1X%, %ficheroIni%,Layout,image1X
IniWrite,%image1Y%, %ficheroIni%,Layout,image1Y
IniWrite,%image1W%, %ficheroIni%,Layout,image1W
IniWrite,%image1H%, %ficheroIni%,Layout,image1H
IniWrite,%image1Transparent%, %ficheroIni%,Layout,image1Transparent
IniWrite,%image1Angle%, %ficheroIni%,Layout,image1Angle
IniWrite,%image1Visible%, %ficheroIni%,Layout,image1Visible
IniWrite,%image2File%, %ficheroIni%,Layout,image2File
IniWrite,%image2X%, %ficheroIni%,Layout,image2X
IniWrite,%image2Y%, %ficheroIni%,Layout,image2Y
IniWrite,%image2W%, %ficheroIni%,Layout,image2W
IniWrite,%image2H%, %ficheroIni%,Layout,image2H
IniWrite,%image2Transparent%, %ficheroIni%,Layout,image2Transparent
IniWrite,%image2Angle%, %ficheroIni%,Layout,image2Angle
IniWrite,%image2Visible%, %ficheroIni%,Layout,image2Visible
IniWrite,%image3File%, %ficheroIni%,Layout,image3File
IniWrite,%image3X%, %ficheroIni%,Layout,image3X
IniWrite,%image3Y%, %ficheroIni%,Layout,image3Y
IniWrite,%image3W%, %ficheroIni%,Layout,image3W
IniWrite,%image3H%, %ficheroIni%,Layout,image3H
IniWrite,%image3Transparent%, %ficheroIni%,Layout,image3Transparent
IniWrite,%image3Angle%, %ficheroIni%,Layout,image3Angle
IniWrite,%image3Visible%, %ficheroIni%,Layout,image3Visible
IniWrite,%listBoxX%, %ficheroIni%,Layout,listBoxX
IniWrite,%listBoxY%, %ficheroIni%,Layout,listBoxY
IniWrite,%listBoxW%, %ficheroIni%,Layout,listBoxW
IniWrite,%listBoxH%, %ficheroIni%,Layout,listBoxH
IniWrite,%listBoxFont%, %ficheroIni%,Layout,listBoxFont
IniWrite,%listBoxFontSize%, %ficheroIni%,Layout,listBoxFontSize
IniWrite,%listBoxFontColor%, %ficheroIni%,Layout,listBoxFontColor
IniWrite,%listBoxFontBold%, %ficheroIni%,Layout,listBoxFontBold
IniWrite,%listBoxVisible%, %ficheroIni%,Layout,listBoxVisible
IniWrite,%AnimationFile%, %ficheroIni%,Layout,AnimationFile
IniWrite,%AnimationX%, %ficheroIni%,Layout,AnimationX
IniWrite,%AnimationY%, %ficheroIni%,Layout,AnimationY
IniWrite,%AnimationW%, %ficheroIni%,Layout,AnimationW
IniWrite,%AnimationH%, %ficheroIni%,Layout,AnimationH
IniWrite,%AnimationVisible%, %ficheroIni%,Layout,AnimationVisible
IniWrite,0, %MusicBackground%,Sound,MusicBackground
IniWrite,0, %LaunchGameSound%,Sound,LaunchGameSound
IniWrite,0, %ListGameUpSound%,Sound,ListGameUpSound
IniWrite,0, %ListGameDownSound%,Sound,ListGameDownSound
}

RecuperarValoresIni(ficheroIni){
if (FileExist(ficheroIni)){
IniRead, VersionTemp, %ficheroIni%,General,Version
IniRead, KeyToLaunchGames, %ficheroIni%,General,KeyToLaunchGames
IniRead, KeyToCloseFE, %ficheroIni%,General,KeyToCloseFE
IniRead, KeyListGameUp, %ficheroIni%,General,KeyListGameUp
IniRead, KeyListGameDown, %ficheroIni%,General,KeyListGameDown
IniRead, Pathtemp, %ficheroIni%,Mame,Path
IniRead, Exetemp, %ficheroIni%,Mame,Exe
IniRead, Snapstemp, %ficheroIni%,Mame,Snaps
IniRead, Videotemp, %ficheroIni%,Mame,Video
IniRead, Romstemp, %ficheroIni%,Mame,Roms
IniRead, RomsExtensionTemp, %ficheroIni%,Mame,RomsExtension
IniRead, RomsListTemp, %ficheroIni%,Mame,RomsList
IniRead, Bats, %ficheroIni%,Mame,Bats
IniRead, Title, %ficheroIni%,Layout,Title
IniRead, TitleX, %ficheroIni%,Layout,TitleX
IniRead, TitleY, %ficheroIni%,Layout,TitleY
IniRead, TitleW, %ficheroIni%,Layout,TitleW
IniRead, TitleH, %ficheroIni%,Layout,TitleH
IniRead, TitleFont, %ficheroIni%,Layout,TitleFont
IniRead, TitleFontSize, %ficheroIni%,Layout,TitleFontSize
IniRead, TitleFontColor, %ficheroIni%,Layout,TitleFontColor
IniRead, TitleFontBold, %ficheroIni%,Layout,TitleFontBold
IniRead, TitleTransparent, %ficheroIni%,Layout,TitleTransparent
IniRead, TitleVisible, %ficheroIni%,Layout,TitleVisible
IniRead, backgroundFile, %ficheroIni%,Layout,backgroundFile
IniRead, backgroundX, %ficheroIni%,Layout,backgroundX
IniRead, backgroundY, %ficheroIni%,Layout,backgroundY
IniRead, backgroundW, %ficheroIni%,Layout,backgroundW
IniRead, backgroundH, %ficheroIni%,Layout,backgroundH
IniRead, backgroundVisible, %ficheroIni%,Layout,backgroundVisible
IniRead, logoFile, %ficheroIni%,Layout,logoFile
IniRead, logoX, %ficheroIni%,Layout,logoX
IniRead, logoY, %ficheroIni%,Layout,logoY
IniRead, logoW, %ficheroIni%,Layout,logoW
IniRead, logoH, %ficheroIni%,Layout,logoH
IniRead, logoTransparent, %ficheroIni%,Layout,logoTransparent
IniRead, logoAngle, %ficheroIni%,Layout,logoAngle
IniRead, logoVisible, %ficheroIni%,Layout,logoVisible
IniRead, snapFile, %ficheroIni%,Layout,snapFile
IniRead, snapX, %ficheroIni%,Layout,snapX
IniRead, snapY, %ficheroIni%,Layout,snapY
IniRead, snapW, %ficheroIni%,Layout,snapW
IniRead, snapH, %ficheroIni%,Layout,snapH
IniRead, snapTransparent, %ficheroIni%,Layout,snapTransparent
IniRead, snapAngle, %ficheroIni%,Layout,snapAngle
IniRead, snapVisible, %ficheroIni%,Layout,snapVisible
IniRead, MarqueeFile, %ficheroIni%,Layout,MarqueeFile
IniRead, MarqueeX, %ficheroIni%,Layout,MarqueeX
IniRead, MarqueeY, %ficheroIni%,Layout,MarqueeY
IniRead, MarqueeW, %ficheroIni%,Layout,MarqueeW
IniRead, MarqueeH, %ficheroIni%,Layout,MarqueeH
IniRead, MarqueeTransparent, %ficheroIni%,Layout,MarqueeTransparent
IniRead, MarqueeAngle, %ficheroIni%,Layout,MarqueeAngle
IniRead, MarqueeVisible, %ficheroIni%,Layout,MarqueeVisible
IniRead, image1File, %ficheroIni%,Layout,image1File
IniRead, image1X, %ficheroIni%,Layout,image1X
IniRead, image1Y, %ficheroIni%,Layout,image1Y
IniRead, image1W, %ficheroIni%,Layout,image1W
IniRead, image1H, %ficheroIni%,Layout,image1H
IniRead, image1Transparent, %ficheroIni%,Layout,image1Transparent
IniRead, image1Angle, %ficheroIni%,Layout,image1Angle
IniRead, image1Visible, %ficheroIni%,Layout,image1Visible
IniRead, image2File, %ficheroIni%,Layout,image2File
IniRead, image2X, %ficheroIni%,Layout,image2X
IniRead, image2Y, %ficheroIni%,Layout,image2Y
IniRead, image2W, %ficheroIni%,Layout,image2W
IniRead, image2H, %ficheroIni%,Layout,image2H
IniRead, image2Transparent, %ficheroIni%,Layout,image2Transparent
IniRead, image2Angle, %ficheroIni%,Layout,image2Angle
IniRead, image2Visible, %ficheroIni%,Layout,image2Visible
IniRead, image3File, %ficheroIni%,Layout,image3File
IniRead, image3X, %ficheroIni%,Layout,image3X
IniRead, image3Y, %ficheroIni%,Layout,image3Y
IniRead, image3W, %ficheroIni%,Layout,image3W
IniRead, image3H, %ficheroIni%,Layout,image3H
IniRead, image3Transparent, %ficheroIni%,Layout,image3Transparent
IniRead, image3Angle, %ficheroIni%,Layout,image3Angle
IniRead, image3Visible, %ficheroIni%,Layout,image3Visible
IniRead, listBoxX, %ficheroIni%,Layout,listBoxX
IniRead, listBoxY, %ficheroIni%,Layout,listBoxY
IniRead, listBoxW, %ficheroIni%,Layout,listBoxW
IniRead, listBoxH, %ficheroIni%,Layout,listBoxH
IniRead, listBoxFont, %ficheroIni%,Layout,listBoxFont
IniRead, listBoxFontSize, %ficheroIni%,Layout,listBoxFontSize
IniRead, listBoxFontColor, %ficheroIni%,Layout,listBoxFontColor
IniRead, listBoxFontBold, %ficheroIni%,Layout,listBoxFontBold
IniRead, listBoxVisible, %ficheroIni%,Layout,listBoxVisible
IniRead, AnimationFile, %ficheroIni%,Layout,AnimationFile
IniRead, AnimationX, %ficheroIni%,Layout,AnimationX
IniRead, AnimationY, %ficheroIni%,Layout,AnimationY
IniRead, AnimationW, %ficheroIni%,Layout,AnimationW
IniRead, AnimationH, %ficheroIni%,Layout,AnimationH
IniRead, AnimationVisible, %ficheroIni%,Layout,AnimationVisible
IniRead, MusicBackground, %ficheroIni%,Sound,MusicBackground
IniRead, LaunchGameSound, %ficheroIni%,Sound,LaunchGameSound
IniRead, ListGameUpSound, %ficheroIni%,Sound,ListGameUpSound
IniRead, ListGameDownSound, %ficheroIni%,Sound,ListGameDownSound
}else{
CrearFicheroIni(ficheroIni)
MsgBox % MostrarMensajes(3)
ExitApp
}
}


Principalmente, he creado tres funciones que lo que hacen es crear nuestro fichero ini (con la estructura que vimos antes), actualizar los valores del fichero ini y finalmente otra función que es la que lee todo el contenido del fichero ini y guarda los valores leidos en variables de nuestro programa.

Funciones / Procedimientos
Supongo que todos más o menos sabréis lo que son las funciones pero lo pongo aquí por haberlas nombrado en las librerías.
Podríamos decir que una función/procedimiento es como una caja negra a la que se le pueden pasar parámetros o no y que pueden devolver un resultado o simplemente hacer una tarea sin devolver nada...
En el ejemplo anterior de librería podéis ver por ejemplo la función CrearFicheroIni(ficheroIni). Esta función es la que crearía nuestro ficheroIni en caso de que no exista con los valores que le decimos; pero qué fichero ini crearía? Pues bien, en este caso le estamos pasando un valor que se llamaría ficheroIni que por ejemplo podría ser c:\FEArcadeSpain.ini.
Es verdad que llamar a esta función devuelve un resultado que es la creación del fichero pero hablando en términos de programación realmente no lo devuelve al menos de forma directa ya que no le hemos puesto un return.

Imaginemos una función a la que le vamos a pasar dos parámeros y nos hará la suma de ambos.
Código: [Seleccionar]
Suma (x,y){
 return x + y
}

Cuando desde nuestro programa llamemos a nuestra función por ejemplo así
Código: [Seleccionar]
Suma(3,4)sabemos que nos devolverá el valor de la suma y por tanto podríamos tener una variable a la que asignarle el resultado.
Código: [Seleccionar]
x := Suma(3,4)de forma que tras haber llamado a nuestra función Suma la variable x contendrá un 7.

Ficheros XML
Al igual que hay fichero ini están este otro tipo de ficheros que además son usados en nuestro mundillo arcade por emuladores como mame y distintos frontends.
De momento, no he aprendido demasiado sobre cómo manejarlos desde Autohotkey pero al menos sí que puedo leer el contenido del mismo y encontrar el valor asociado a una estructura.

Voy a poner un ejemplo con la estructura de fichero xml que usa ahora mismo nuestro lanzador.
Spoiler: mostrar

<?xml version="1.0" encoding="UTF-8"?>
<mame>
    <game name="wrally">
        <description>World Rally</description>
        <bat>World Rally.bat</bat>
    </game>
    <game name="kungfu">
        <description>KungFu Master</description>
        <bat>KungFuMaster.bat</bat>
    </game>
    <game name="commando">
        <description>Commando</description>
        <bat>Commando.bat</bat>
    </game>
    <game name="galaga">
        <description>Galaga</description>
        <bat>Galaga.bat</bat>
    </game>
</mame>


Digamos que la estructura de nuestros datos será que nuestros juegos (game) se compondrán de tres campos que serán name, decription y bat. Dichos campos se corresponderían con el nombre de la rom, la descripción del juego que sería el nombre largo que queremos que aparezca en el lanzador y bat que contendría el nombre del fichero bat que lanzaría dicho juego.

Voy a poner el código interno de nuestro programa lanzador.
Código: [Seleccionar]
;Read xml file and load values into descList
xmlObj := ComObjCreate( "MSXML2.DOMDocument.6.0" )
xmlObj.load( RomsListTemp )

for nodeItem in ( xmlObj.selectNodes( "//description" ), descList := "" )
    descList .= nodeItem.text "|"
;End read xml

Lo primero es decir que las líneas que empiezan por punto y coma (;) son comentarios.
Resumiendo, lo que hacemos es crear un objeto del tipo XML y dentro le cargamos el contenido de nuestro fichero xml que está en nuestra variable RomsListTemp . Esta variable se cargaba con el valor de nuestro fichero ini, si miramos atrás podremos ver que en la sección de Mame había una key llamada RomList.
En las dos líneas de código siguiente es crearnos y asignarle a una variable llamada descList todo el contenido del campo description de nuestro fichero xml separados por el carácter |.

Perdonad la mala explicación pero esta parte la verdad es que no la controla y tengo que buscar documentación al respecto.
En un foro inglés que frecuento me han recomendado esta documentación
Citar
you can try with http://www.w3schools.com/xpath/default.asp
and http://www.w3schools.com/dom/default.asp
and there is a wrapper which might give a good idea about xml using AHK
and keep in mind that this "MSXML2.DOMDocument.6.0" is a COM object that you can get its documentations from the MSDN: http://msdn.microsoft.com/en-us/library/ms763742%28v=vs.85%29.aspx
here you get methods and properties...
http://msdn.microsoft.com/en-us/library/ms764730%28v=vs.85%29.aspx
which is really good to understand anything you can or want to do
and there is more and more google some methods or functions for a better underspending
once you have a feel of how it works and how to work with it, the rest is easy
about the wrapper it good for learning and testing
http://www.autohotkey.com/board/topic/89197-xml-build-parse-xml/

(miré por encima pero no saqué mucho en claro.)

En este punto, necesitaría algún voluntario con algo de tiempo a ver si me pudiera crear dos ficheros xml. Uno llamado retos.xml que contuviera la información de los retos a los que hemos jugado y otro llamado liga.xml con la información de los juegos que hay para jugar la liga de ArcadeSpain. ¿Algún voluntario porfi?
« Última modificación: Enero 29, 2015, 08:28:24 am por empardopo »

Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #2 en: Enero 19, 2015, 09:55:03 am »
<reservado>

Desconectado machiminax

  • VIP
  • *
  • Mensajes: 1849
  • Gracias 112
  • Ciudad: indefinida
  • Pais: desconocido
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #3 en: Enero 19, 2015, 09:18:30 pm »
Me apunto como follower del tema... contentill contentill

Un saludo.


Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #4 en: Enero 28, 2015, 07:39:17 pm »
El proyecto sigue adelante ... Os dejo un pequeño video de lo que llevo!

http://arcadespain.info/images/empardopo/Tutoriales/FEArcadeSpain/FEArcadeSpain.mp4

He tenido un pequeño problemilla y ha sido que el audio esté en off porque tenía a los enanos pegando gritos así que he metido musiquilla ochentera, jeje y el otro problema es que el Camtasia no me ha grabado el lanzamiento del juego pero ya os digo que funciona ...

En breve pediré alguna ayudilla para el xml y empezaré el tutorial de cómo lo he hecho, etc, etc.

Especial gracias a Kenzox13 por el fondito que he usado para el "front end".

No seáis muy duros con los comentarios ...

Desconectado sirarzur

  • Usuario Activo
  • *
  • Mensajes: 59
  • Gracias 2
  • Ciudad: Barcelona
  • Pais: Barcelona
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #5 en: Enero 28, 2015, 07:48:05 pm »
Música ochentera?? Por dios esa es CC Catch, hacia como mil años que no escuchaba esta canción!!!Has dejado el pabellon muy alto!!!
Como el compi yo también me hago follower del tema!
Gran trabajo!!

Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #6 en: Enero 29, 2015, 07:47:41 am »
Música ochentera?? Por dios esa es CC Catch, hacia como mil años que no escuchaba esta canción!!!Has dejado el pabellon muy alto!!!
Como el compi yo también me hago follower del tema!
Gran trabajo!!

Si la has conocido "al vuelo" es que más o menos somos de la misma quinta, jajajaja! Le iba a meter algo de Modern Talking pero encontré ésta antes, jajajaja!

Bueno chicos, empiezo a poner alguna cosilla ... He empezado por los ficheros inis, librerías, funciones y fichero xml (sólo de pasada).

Iré poniendo cosillas poco a poco ...

He pedido ayuda para ver si algún voluntario me crea un par de ficheros xml que necesitaría ...

¿Algún voluntario?
« Última modificación: Enero 29, 2015, 08:29:42 am por empardopo »

Desconectado Kenzo

  • Moderador global
  • *
  • Mensajes: 1094
  • Gracias 65
  • Ciudad: Alcalá de Henares (Madrid)
  • Pais: España
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #7 en: Enero 29, 2015, 12:44:04 pm »
Música ochentera?? Por dios esa es CC Catch, hacia como mil años que no escuchaba esta canción!!!Has dejado el pabellon muy alto!!!
Como el compi yo también me hago follower del tema!
Gran trabajo!!

Si la has conocido "al vuelo" es que más o menos somos de la misma quinta, jajajaja! Le iba a meter algo de Modern Talking pero encontré ésta antes, jajajaja!

Bueno chicos, empiezo a poner alguna cosilla ... He empezado por los ficheros inis, librerías, funciones y fichero xml (sólo de pasada).

Iré poniendo cosillas poco a poco ...

He pedido ayuda para ver si algún voluntario me crea un par de ficheros xml que necesitaría ...

¿Algún voluntario?
Crear un par d xml supongo yo que sera sobre géneros o tipo, no? de mame... ¿Que necesitas? creo que puedo hacer algo, creo xD

Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #8 en: Enero 30, 2015, 04:41:20 pm »
Vamos a ver la estructura para mi pequeño lanzador sería la siguiente:
Código: [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<mame>
  <game name="wrally">
    <description>World Rally</description>
    <bat>World Rally.bat</bat>
  </game>
  <game name="kungfum">
    <description>KungFu Master</description>
    <bat>KungFuMaster.bat</bat>
  </game>
  <game name="commando">
    <description>Commando</description>
    <bat>Commando.bat</bat>
  </game>
  <game name="galaga">
    <description>Galaga</description>
    <bat>Galaga.bat</bat>
  </game>
  <game name="wrally2">
    <description>World Rally 2</description>
    <bat>World Rally2.bat</bat>
  </game>
</mame>

Sería cuestión de crear dos ficheros con esta estructura pero obviamente cambiando los datos:
Retos.xml
LigaAS.xml

El de retos llevaría todos los juegos de los retos jugados hasta ahora con los datos del ejemplo, nombre de rom, nombre que aparecería en el lanzador y nombre del fichero bat.

Igual para el fichero LigaAS.xml pero con los juegos seleccionados por los jugadores para jugar la Liga ArcadeSpain que están en el hilo correspondiente.

Me ayudáis entonces alguno??

Thanks!

Desconectado sirarzur

  • Usuario Activo
  • *
  • Mensajes: 59
  • Gracias 2
  • Ciudad: Barcelona
  • Pais: Barcelona
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #9 en: Enero 30, 2015, 05:59:04 pm »
Como tomé parte del foro y pedias voluntarios, encuentro que seria de mala educación por mi parte no volver a decir nada. En mi caso, de programación no puedo ayudar en nada de nada (espero que el año que viene pueda solucionar esto), lo mio es la carpinteria y el bricolage. Lo siento!

Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #10 en: Enero 30, 2015, 06:02:03 pm »
Como tomé parte del foro y pedias voluntarios, encuentro que seria de mala educación por mi parte no volver a decir nada. En mi caso, de programación no puedo ayudar en nada de nada (espero que el año que viene pueda solucionar esto), lo mio es la carpinteria y el bricolage. Lo siento!
No te preocupes y mucha gracias por contestar.
Saludos

Desconectado machiminax

  • VIP
  • *
  • Mensajes: 1849
  • Gracias 112
  • Ciudad: indefinida
  • Pais: desconocido
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #11 en: Febrero 01, 2015, 04:47:50 am »
Empardopo como va la historia del .xml
Habria que hacerlo a mano?


Desconectado empardopo

  • Admin
  • *
  • Mensajes: 21782
  • Gracias 761
  • Espero mejorar al KungFu Master!
    • Mi canal de Youtube
  • Ciudad: Norte de África
  • Pais: Escoña
  • Iniciales nick: EPP
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #12 en: Febrero 01, 2015, 10:50:27 am »
Mientras no doy con la tecla de hacerlo programado probablemente sí;más que nada para esta primera versión.

Seguro que cuando tenga algo más de tiempo pueda automatizarlo...

Desconectado paulmichel21

  • Usuario
  • *
  • Mensajes: 1
  • Gracias 0
  • Ciudad: buenos aires
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #13 en: Febrero 01, 2015, 06:59:46 pm »
Me sumo como follower...  Me entusiasma mucho aprender.  Sobre esto.  Gracias

Desconectado Kenzo

  • Moderador global
  • *
  • Mensajes: 1094
  • Gracias 65
  • Ciudad: Alcalá de Henares (Madrid)
  • Pais: España
Re:Proyecto en Autohotkey - Lanzador de juegos Mame
« Respuesta #14 en: Febrero 01, 2015, 09:55:01 pm »
Yo haber si me pongo las pilas y le exo una mano en lo que te falta..

 


* Reto 321 - Joust 2 - Survival of the Fittest  Autor: Zael Foro: Competiciones y concursos 16/06/2024 (11:37)
* M.A.L.A147+Mame0.153 64/32 bits +35 Roms + Layout Tron_MameV1   Autor: Zael Foro: MALA 16/06/2024 (11:32)
* ¿A qué estáis jugando ahora mismo?  Autor: Zael Foro: Offtopic 16/06/2024 (11:28)
* ZX Touch o el timo de la estampita  Autor: sirdrak Foro: Retroconsolas 12/06/2024 (15:00)
* Lección de vida  Autor: Zael Foro: Offtopic 10/06/2024 (13:13)
* MPAGD (Multi Platform Arcade Game Designer)  Autor: empardopo Foro: Creación de juegos 09/06/2024 (14:37)
* El megapost del ZX Spectrum  Autor: empardopo Foro: Offtopic 09/06/2024 (14:25)
* [Recomendación] Cine para los findes en casa (bueno, bonito y barato)  Autor: empardopo Foro: Offtopic 09/06/2024 (14:24)
* Ayuda con configuración emulador PXSX2  Autor: empardopo Foro: Emuladores 09/06/2024 (14:20)
* Amiga Games + 1.9.7  Autor: empardopo Foro: Emuladores 09/06/2024 (14:12)
* Salón Recreativo #55 (27-04-2024 / 26-05-2024)  Autor: hoz3 Foro: Salón Recreativo FaseBonus 04/06/2024 (05:52)
* ASUS, ¿me engaña, me tima o se rie de mí?  Autor: empardopo Foro: Offtopic 03/06/2024 (20:09)
* [PS4] PS4 5.05 - Should I Stay or Shoud I Go?  Autor: empardopo Foro: Consolas actuales 03/06/2024 (20:07)
* Retro Portable Maker ArcadeSpain (RPMA)  Autor: empardopo Foro: Otros programas 03/06/2024 (20:03)
* Volante PXN V9 - ¿Ganga... o tongo?  Autor: Zael Foro: Reviews tecnológicas 01/06/2024 (12:08)
* Ofertas Amazon  Autor: empardopo Foro: Offtopic 30/05/2024 (19:35)
* Reto 320 - Wizard of wor  Autor: empardopo Foro: Competiciones y concursos 28/05/2024 (20:58)
* GB-Operator (Emulador GB/GBC/GBA en PC)  Autor: Zael Foro: Retroconsolas 28/05/2024 (20:12)
* Salón Recreativo FaseBonus - Preparativos y Sugerencias  Autor: Zael Foro: Salón Recreativo FaseBonus 24/05/2024 (10:21)
* Música y artistas aptos para nuestra jukebox  Autor: empardopo Foro: Offtopic 22/05/2024 (20:02)
* [Recomendacion] Series para ver  Autor: empardopo Foro: Offtopic 20/05/2024 (20:21)
* Van dos y se cae el del medio - Hilo de cachondeo general  Autor: joselopez Foro: Offtopic 16/05/2024 (00:56)
* [N3DS] Red Viper - Emulando Virtual Boy como Dios manda  Autor: sirdrak Foro: Noticias de emuladores 13/05/2024 (00:53)
* La inteligencia artificial ha llegado a la música  Autor: Zael Foro: Offtopic 12/05/2024 (20:24)
* Info sobre MARP  Autor: empardopo Foro: Records y wolfmame 12/05/2024 (20:09)
* Stop the express  Autor: empardopo Foro: ZX Spectrum 12/05/2024 (20:05)

Reto 320: Wizard of Wor
Buscaunchollo.click