Título: Menú de selección en Batch
Publicado por: Binary_Death en 5 Agosto 2010, 15:48 pm
Pues... esto pertenecía a un proyecto que quedó bastante en el aire... y bueh, aquí lo dejo, a ver que tal, porque me parece un método interesante :P @ECHO OFF @SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION @MODE CON COLS=80 LINES=25 @COLOR 0F @TITLE BOOT @REM CODED BY BINARY_DEATH @REM DATA: LAST LINE: 12 :BIOS CALL:LOAD_KEYBOARD CALL:LOAD_GRAPHIC CALL:GRAPHIC_LOAD "!LOGO!" SET/A INDEX=0,LIMIT=2 :MENU SET/A COUNT=0 FOR %%I IN (CHANGE,START,SETTINGS) DO ( IF !INDEX! EQU !COUNT! ( SET VAR=!%%I:@=F!&&SET VAR=!VAR:#=F0! CALL:GRAPHIC_LOAD "!VAR!" ) ELSE ( SET VAR=!%%I:@=0!&&SET VAR=!VAR:#=0F! CALL:GRAPHIC_LOAD "!VAR!") SET/A COUNT+=1 ) CALL KEYBOARD.COM IF %ERRORLEVEL% EQU 80 ( IF %INDEX% LSS %LIMIT% ( SET/A INDEX+=1 ) ELSE (SET/A INDEX=0)) IF %ERRORLEVEL% EQU 72 ( IF %INDEX% GTR 0 ( SET/A INDEX-=1 ) ELSE (SET/A INDEX=%LIMIT%)) IF %ERRORLEVEL% EQU 13 ( EXIT/B %INDEX% ) GOTO:MENU :GRAPHIC_LOAD FOR %%S IN (%~1) DO ( FOR /F "TOKENS=1,2,3 DELIMS=$" %%K IN ("%%S") DO ( ECHO.EB800:%%K "%%L"%%M 1>>CSHOW.TMP )) (TYPE CSHOW.TMP&ECHO.Q)|DEBUG>NUL DEL/Q CSHOW.TMP GOTO:EOF :LOAD_GRAPHIC SET CHANGE=642$C$#,644$H$#,646$A$#,648$N$#,^ 64A$G$#,64C$E$#,64E$Û$@,650$B$#,652$O$#,654$S$# SET START=6E2$S$#,6E4$T$#,6E6$A$#,6E8$R$#,^ 6EA$T$#,6EC$Û$@,6EE$B$#,6F0$O$#,6F2$S$# SET SETTINGS=782$S$#,784$E$#,786$T$#,^ 788$T$#,78A$I$#,78C$N$#,78E$G$#,790$S$# SET LOGO=500$±$F,A2$±$F,142$±$F,1E2$±$F,282$±$F,322$±$F,^ 3C2$±$F,502$±$F,A4$±$F,3C4$±$F,504$±$F,A6$±$F,^ 3C6$±$F,506$±$F,A8$±$F,1E8$±$F,3C8$±$F,508$±$F,^ AA$±$F,1EA$±$F,3CA$±$F,50A$±$F,14C$±$F,28C$±$F,^ 32C$±$F,3CC$±$F,50C$±$F,50E$±$F,510$±$F,B2$±$F,^ 3D2$±$F,512$±$F,B4$±$F,3D4$±$F,514$±$F,B6$±$F,^ 156$±$F,1F6$±$F,296$±$F,336$±$F,3D6$±$F,516$±$F,^ B8$±$F,158$±$F,1F8$±$F,298$±$F,338$±$F,3D8$±$F,^ 518$±$F,BA$±$F,3DA$±$F,51A$±$F,BC$±$F,3DC$±$F,^ 51C$±$F,51E$±$F,520$±$F,C2$±$F,162$±$F,202$±$F,^ 2A2$±$F,342$±$F,3E2$±$F,522$±$F,C4$±$F,3E4$±$F,^ 524$±$F,C6$±$F,3E6$±$F,526$±$F,C8$±$F,3E8$±$F,^ 528$±$F,CA$±$F,3EA$±$F,52A$±$F,CC$±$F,16C$±$F,^ 20C$±$F,2AC$±$F,34C$±$F,3EC$±$F,52C$±$F,52E$±$F,^ 530$±$F,D2$±$F,172$±$F,212$±$F,2B2$±$F,3F2$±$F,^ 532$±$F,D4$±$F,2B4$±$F,3F4$±$F,534$±$F,D6$±$F,^ 2B6$±$F,3F6$±$F,536$±$F,D8$±$F,2B8$±$F,3F8$±$F,^ 538$±$F,DA$±$F,2BA$±$F,3FA$±$F,53A$±$F,DC$±$F,^ 2BC$±$F,35C$±$F,3FC$±$F,53C$±$F,53E$±$F GOTO:EOF :LOAD_KEYBOARD IF NOT EXIST KEYBOARD.COM (( ECHO.N KEYBOARD.COM ECHO.E 0000 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21 ECHO.R CX ECHO.000E ECHO.W0 ECHO.Q)|DEBUG 1>NUL 2>&1 ) GOTO:EOF
No usa ni WBAT ni programas externos que MS-DOS no incluya, sólo se usa debug para acceder a la memoria de video. Saludos!
Título: Re: Menú de selección en Batch
Publicado por: leogtz en 5 Agosto 2010, 18:34 pm
Claro que sí usa programas externos, usa keyboard.com que no es nativo. Una cosa es crear los ejecutables y otra que sean comandos internos del intérprete.
Título: Re: Menú de selección en Batch
Publicado por: Binary_Death en 5 Agosto 2010, 18:55 pm
xDDD tienes razón, bueno, pues descontando eso (? xD
Título: Re: Menú de selección en Batch
Publicado por: leogtz en 5 Agosto 2010, 22:07 pm
Lo he probado, funciona bien, solo falta "anunciar" qué es lo que eligió el usuario.
Título: Re: Menú de selección en Batch
Publicado por: Binary_Death en 5 Agosto 2010, 22:54 pm
Sí... mira, en esta parte, que es la que comprueba que la tecla presionada sea ENTER, sólo es necesario redirigir hacia alguna parte del código. IF %ERRORLEVEL% EQU 13 ( CALL:OPTION_%INDEX% EXIT /B )
Por ejemplo ^^ Saludos!
Título: Re: Menú de selección en Batch
Publicado por: Ari Slash en 5 Agosto 2010, 23:05 pm
muy bueno binary ;)
Título: Re: Menú de selección en Batch
Publicado por: leogtz en 5 Agosto 2010, 23:24 pm
Bueno, usando keyboard.com, yo también he creado mi menú selectivo: setlocal enableextensions enabledelayedexpansion :: Opciones set "choices[ !counter!]=% style="color: #448888;">%_" ) set /a n_choices= %counter% call:print !luz! % style="color: #448888;">n_choices% :loop ) ) if !luz! equ !n_choices! ( ) ) ) call:print !luz! !n_choices! :eleccion echo Elegiste la opción : !choices[% style="color: #448888;">choice%]! :print cls echo - ^> !choices[% style="color: #448888;">%_]! echo !choices[% style="color: #448888;">%_]! ) )
Archivos de programa -> ares code.bat CONFIG.SYS cplusplus cpps c_codes Documents and Settings dudas.bat escuela.rar file.txt Intel KEYBOARD.COM log_1.txt log_2.txt log_3.txt log_4.txt log_5.txt log_6.txt MinGW Perl Program Files Qt reporte_porno.rar revistas test.bat Usb WINDOWS _Corel _foster.rar
Elegiste la opci¾n : ares
C:\>
Título: Re: Menú de selección en Batch
Publicado por: Ari Slash en 5 Agosto 2010, 23:27 pm
wau! voi a buscar un tuto de keryborad.com me estoy perdiendo de algo parece :xD
Título: Re: Menú de selección en Batch
Publicado por: Binary_Death en 5 Agosto 2010, 23:31 pm
Muy bueno leo! ^^ Trabajaré la forma de poder automatizar el estilo del mío... para no tener que diseñar las opciones manualmente. Igual, por el método empleado correría muy lento, así que no se si vale la pena =/ mejor que de ese tipo de menú sólo hayan cortitos :xD
En fin, saludos =)
Por cierto, Ari-Slash... el menu selectivo podría hacerse igual con set junto con /p, pero habría que presionar una tecla y además no aceptaría laexas flechas de dirección... igualmente, en cuanto al funcionamiento, el keyboard es lo de menos, solo es como un set /p al cual le das una entrada de un solo caracter y almacena en errorlevel el número en ascii de la tecla pulsada... así que de ahí compruebas.
|