DEBUG (BATCH)

Iniciado por FerJGS, 19 Julio 2010, 12:05 PM

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

kworld

#20
Cita de: flony en 12 Agosto 2010, 01:48 AM
bue aca la pregunta que significa esta parte del code
Echo.EB800:A0 "R"1F"o"1F"d"1F"r"1F"i"1F"g"1F"o"1F" "1F"K"1F"I"1F"L"1F"L"1F"E"1F"R"1F
o seas s q es para ingresar letras pero
1)porque EB800 y no EB799
2)porque A0 y no A1
3)1F y no F sola

q es para salir
1)b800 es la dirección de la memoria de vídeo.
2)La e es para ingresar (significa enter) otra alternativa es el uso de f (fill)
el número después de los dos puntos es el punto dónde comenzará a escribir en memoria, en el caso de fill el número que viene después es el límite. Si vemos la memoria cómo un vector y la pantalla cómo una matriz de dos dimensiones, podemos convertir la dirección especificada en dos dimensiones a una dimensión así:

fila * ancho + columna

con el comando mode con
podemos ver el tamaño, el número de columnas y las líneas.
por defecto es:
cols 80
lines 300

si queremos escribir en la segunda línea en el tercer carácter, y tenemos la configuración por defecto :

fila:2 (partiendo del índice 0 y avanzando de dos en dos: 0 2 4 (la segunda fila es 2 y la tercera es 4))
columna=4 (partiendo del índice 0) (0 2 4)
ancho=80 (el valor de cols en mode con)

cálculo: 2 * 80 + 4 = 164 y ahora convertido a hexadecimal: A4

Ejemplo: presionar enter dos veces.

@echo off
Color 6D

(
Echo.F B800:00 F9F "h" 4f "o" 4f "l" 4f "a" 4f
Echo.Q
) | Debug > nul

pause > nul
cls

(
Echo.E B800:A4 68 4f "o" 4f "l" 4f "a" f
Echo.Q
) | Debug > nul

pause > nul




en el ejemplo, el carácter encerrado entre comillas es para cómodidad, también podrías especificarlo en ascii hexadecimal por ejemplo reemplaza "h" por 68 y verás que es lo mismo.
En la especificación del color:
4f el primer número es el fondo del carácter y el segundo es el color del carácter, en este caso es para cambiar el color del fondo y que no tome el color negro, si especificamos solamente f toma como fondo el 0 (que es el color negro).

En este caso el color especificado es como aparece en comando color /?

Aquí tienes más información del comando debug, en este caso para reconstruir archivos binarios: http://ss64.org/viewtopic.php?pid=3152#p3152











flony

#21
gracias kworld...eso es una explicacion  ;-)....paso a copiar para tener este dato ...buena pagina y aguante herramienta de idioma de google  ;D
si un problema no tiene solucion entonces no es un problema...es algo inevitable

FerJGS

Tutoriales así estaba buscando yo, infinitas gracias Kwrld, es perfecto...Ahora ya estaría genial que nos explicaras igual de bien cómo hacer para establecer sistemas de coordenadas para detectar pulsaciones del ratón en un área concreta. ¿me ayudas?

FerJGS

¿Me explica alguien cómo hacer para establecer coordenadas en variables y detectar en ellas las pulsaciones del ratón por favor?

kworld

#24
Básicamente es ejecutar la rutina con el debug, y capturar los datos con for /f Aquí tienes el código listo:


@Echo off
Setlocal Enableextensions

Call :Mouse16
Echo.C=%C% X=%X% Y=%Y%
Pause
Goto :Eof

:Mouse16
Pushd "%Temp%"
If Not Exist Mouse.Dat Call :BMouse16
For /F "Tokens=4,6,8 Delims== " %%a in (
'Type Mouse.dat ^|Debug ^| Find /i "X"'
) Do Set /a "C=0x%%a,X=0x%%b,Y=0x%%c" 2>Nul
Popd
Goto :Eof

:BMouse16
Pushd "%Temp%"
If Exist Mouse.Dat Goto :BMouse1_
Echo.>Mouse.dat
::Codigo 16 bits de Mike Jones.
For %%+ in (
"E100 B8 01 00 33 DB CD 33 B0 03 43 CD 33"
"E10C 0B DB 74 FA 91 D3 EA D3 E8 91 C3"
"G116"
"Q"
"") Do Echo.%%~+>>Mouse.dat
:BMouse1_
Popd
Goto :Eof



Nota: Si quieres un mouse pero para sistemas de 64 bits, claro que sin debug.
http://groups.google.co.uk/group/alt.msdos.batch.nt/browse_thread/thread/d15e99aec4edafec#

FerJGS

hola kworld....he probado el código y no me funciona...pero muchas gracias por ponerlo...¿me puedes explicar su funcionamiento parte por parte, y qué es cada cosa? gracias.

kworld

#26
debería funcionar, si se queda pegado debes hacer clic.


C:\Users\Kworld\Desktop>type Mouse.dat | debug
-E100 B8 01 00 33 DB CD 33 B0 03 43 CD 33
-E10C 0B DB 74 FA 91 D3 EA D3 E8 91 C3
-G116

AX=0003  BX=0001  CX=0017  DX=0008  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1380  ES=1380  SS=1380  CS=1380  IP=0116   NV UP EI PL NZ AC PE NC
1380:0116 C3            RET
-Q

C:\Users\Kworld\Desktop>type Mouse.dat | debug | find /i "X"
AX=0003  BX=0001  CX=0017  DX=0008  SP=FFEE  BP=0000  SI=0000  DI=0000

C:\Users\Kworld\Desktop>


Luego de hacer clic se muestra los valores de los registros,  en este caso solamente nos interesan los registros BX, que será 1 si hicimos clic con el botón izquierdo, y 2 si fue con el derecho. CX es la coordenada x del cursor y DX es la coordenada y, eso es todo, lo otro es capturar la información con el for /f, y se atrapa la información anteponiedo 0x en el set /a para que no tome los números como octales ya que comienzan con 0 sino como lo que son valores hexadecimales.

FerJGS

No sé por qué, no me funciona, me sale la consola con el guión, como al abrir cmd y hacer @echo off&cls, justo así, una simple barra baja parpadeando.

Bien yo ya había entendido qué era AX, BX, CX, DX y eso...

¿Pero qué es  e100 B8? ¿qué es cada par hexadecimal (Qué significa)? ¿Cómo defino las áreas que quiero para los botones, con sus coordenadas, ¿cómo hago para compararlas tipo "si está entre una esquina y su opuesta?

Explícame por favor, muchas gracias.

FerJGS

¿Me lo puede explicar alguien por favor?

[L]ord [R]NA

Cita de: FerJGS en  1 Agosto 2010, 00:22 AM
Otra cosa...¿cómo hago para que batch detecte las coordenadas del ratón con debug?

para el Debug necesitas ASM, por lo tanto que te cuesta aprender ASM de salto y todo listo