Manual - Usar Mouse en Batch

Iniciado por EddyW, 9 Julio 2009, 09:26 AM

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

EddyW

Bueno, eso, ahora jugando con Debug se me ocurrio por que no hacer tambien posible usar el Mouse
en Batch, ya que se podia usar keyBoard..
Pues decidi hacer un Comando MS-DOS en VB6, pero me salio re pesado aun comprimiendolo con UPX..
25Kb, algo grande al convertirlo en Binario para hacerlo Portable, asi que me cae este code..
De la escuela de Batch (Año 1995 - 2005)..

Primero digo que les sera un poco mas dificil entenderlo, ya que no es como el KeyBoard, ya que este no se ensambla..
Bueno sin mas que decir es sencillo, un ejemplo claro:
Código (dos) [Seleccionar]
@Echo off
(
echo e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo g116
echo q
)>tmps.dat
Debug<tmps.dat|Find /I "X"
Pause>nul

Al ejecutarlo, den le Click en cualquier parte de la ventana del Cmd..
y les saldra algo como esto:
Código (asm) [Seleccionar]
AX=0003  BX=0001  CX=0038  DX=0014  SP=FFEE  BP=0000  SI=0000  DI=0000
Explico BX=0001 tiene dos valores 0001 y 0002 osea si se hace Click derecho o Izquierdo..
El CX=... es la posicion X del cursor, y DX=... es la posicion Y del Cursor..
Eso nos basta para hacer un buen Batch, y podemos colocarlos en una variable con For..
Otro ejemplo para jugar mas con su funcionamiento:
Código (dos) [Seleccionar]
@Echo off
:g
(
echo e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo g116
echo q
)>tmps.dat
Debug<tmps.dat|Find /I "X"
Goto:g

Espero les Guste..


Un Ejemplo de Uso mas Avanzado:


Código (dos) [Seleccionar]
@Echo off
(
echo e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo g116
echo q
)>Zmouse.txt
Mode Con Cols=80 lines=25
SetLocal ENABLEDELAYEDEXPANSION
cls
Echo                                                                              [X]
Echo.
Echo.
Echo.
Echo                      Presina un Boton:
Echo.
Echo.
Echo                      +------+          +------+
Echo                      +  Ok  +          +Cancel+
Echo                      +------+          +------+
:g
Del /Q /A ZDats>nul 2>&1
Debug< Zmouse.txt |Find /i "x">ZDats
Call:x
call:y
Call:Back
Call:mous "0015 0016 0017 0018 0019 001A 001B 001C" "%CX%" "0007 0008 0009" "%DX%"
If %state% EQU OK (Msg * Usted Presiono el Boton OK!!!)
Call:mous "0027 0028 0029 002A 002B 002C 002D 002E" "%CX%" "0007 0008 0009" "%DX%"
If %state% EQU OK (Msg * Usted Presiono el Boton Cancelar!!!)
Call:mous "004E" "%CX%" "0000" "%DX%"
If %state% EQU OK (Exit)
Set /p= X:%CX% ::: Y:%DX%<nul
)
Goto:g

:X
Set /p LineCode=<ZDats
for /f "Tokens=3" %%_ in ('Type ZDats') do (
Set %%_
Goto:eof
)

:Y
Set /p LineCode=<ZDats
for /f "Tokens=4" %%_ in ('Type ZDats') do (
Set %%_
Goto:eof
)

:Back
for /f "tokens=*" %%a in ('ipconfig') do (
Set /p=%%a<nul
Goto :eof
)

:mous
Set DMous=%2
Set DMous=!DMous!%4
for %%m in (%~1) do (
for %%n in (%~3) do (
if !DMous! EQU "%%m""%%n" (
Set state=OK
Set CX=0000
Set DX=0000
Goto:eof
) ELSE (
Set state=NO
)
)
)
Goto:eof

Espero les Guste, en Vista la Parte de Set /p= X:%CX% ::: Y:%DX%<nul pueden borrarla ya que les molestara, eso solo funca en XP, pero lo demas funciona Bien..

SaluDOS!!!

SmartGenius

Un poco mas simple y combinado con el tema de las coordenadas.... ;D

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

if not exist ax.dat (
ECHO e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3>ax.dat
FOR %%! in (.g116 .q) do ECHO%%!>> ax.dat
)

:Init
for /l %%a in (0,1,30) do (
for /l %%b in (0,1,25) do (
set "X%%aY%%b= "))

:Graphic
cls
For /l %%d in (0,1,25) do (
For /l %%e in (0,1,30) do (
Set Lin_%%d=!Lin_%%d!!X%%eY%%d!))
For /l %%f in (0,1,25) do (echo.!Lin_%%f!)
Call :Mouse
For /l %%f in (0,1,25) do (Set "Lin_%%f=")
Goto :Graphic

:Mouse
For /f "skip=3 tokens=6-8 delims== " %%a in ('DEBUG ^< ax.dat') do (
Set /a "X_Axis=0x%%a"
Set /a "Y_Axis=0x%%c"
Set X!X_Axis!Y!Y_Axis!=*
Goto :Eof


Saludos.



0x0309

#3
_edite el post.

FerJGS

Hola 3D1...me han recomendado este tema para preguntas sobre el ratón...Ahí va mi pregunta...

¿se puede hacer que detecte al posar el ratón en la consola, no hacer clic, sino solo pasarlo por encima)

Algo como

if (ratón en estas coordenadas) (instrucciones)
if "clic en estas coordenadas" (instrucciones)

Lo del clic ya lo tengo...pero se podría detectar al posar el ratón?

Otra cosa...en mouse.dat....BX es el botón, CX y Dx las coordenadas pero..¿qué es todo lo demás? ¿Qué es AX, por ejemplo?

Gracias